- 浏览: 1482740 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (691)
- linux (207)
- shell (33)
- java (42)
- 其他 (22)
- javascript (33)
- cloud (16)
- python (33)
- c (48)
- sql (12)
- 工具 (6)
- 缓存 (16)
- ubuntu (7)
- perl (3)
- lua (2)
- 超级有用 (2)
- 服务器 (2)
- mac (22)
- nginx (34)
- php (2)
- 内核 (2)
- gdb (13)
- ICTCLAS (2)
- mac android (0)
- unix (1)
- android (1)
- vim (1)
- epoll (1)
- ios (21)
- mysql (3)
- systemtap (1)
- 算法 (2)
- 汇编 (2)
- arm (3)
- 我的数据结构 (8)
- websocket (12)
- hadoop (5)
- thrift (2)
- hbase (1)
- graphviz (1)
- redis (1)
- raspberry (2)
- qemu (31)
- opencv (4)
- socket (1)
- opengl (1)
- ibeacons (1)
- emacs (6)
- openstack (24)
- docker (1)
- webrtc (11)
- angularjs (2)
- neutron (23)
- jslinux (18)
- 网络 (13)
- tap (9)
- tensorflow (8)
- nlu (4)
- asm.js (5)
- sip (3)
- xl2tp (5)
- conda (1)
- emscripten (6)
- ffmpeg (10)
- srt (1)
- wasm (5)
- bert (3)
- kaldi (4)
- 知识图谱 (1)
最新评论
-
wahahachuang8:
我喜欢代码简洁易读,服务稳定的推送服务,前段时间研究了一下go ...
websocket的helloworld -
q114687576:
http://www.blue-zero.com/WebSoc ...
websocket的helloworld -
zhaoyanzimm:
感谢您的分享,给我提供了很大的帮助,在使用过程中发现了一个问题 ...
nginx的helloworld模块的helloworld -
haoningabc:
leebyte 写道太NB了,期待早日用上Killinux!么 ...
qemu+emacs+gdb调试内核 -
leebyte:
太NB了,期待早日用上Killinux!
qemu+emacs+gdb调试内核
http://www.tuicool.com/articles/jYreMf
树莓派编译网卡
编译内核模块的helloworld的例子如下
环境:
1.linode虚拟机
2.centos系统,其他系统都行
3.下面ibm的代码,sample.tar.gz
4.编译内核模块需要源码
参考链接
http://blog.csdn.net/tigerjb/article/details/6010997
http://www.ibm.com/developerworks/cn/linux/l-cn-kernelmodules/index.html
上代码
Makefile
★★★★★★★★★★★★★★★我是罪恶的分割线★★★★★★★★★★★
步骤:
环境linode
centos6
由于linode的内核都是自己编译的
上网查了一些自己编译内核的方法,但是还是启动报错
参考http://www.xiaozhou.net/ittech/vps-ittech/upgrade_linode_vps_kernel_manually-2011-04-28.htm
★这个写得很好,学习了
后来自己下了
这一步是用系统当前的config文件
作为内核的make menuconfig或者make config产生的文件
配置项太jb多了
然后可能需要改
然后就会在/boot下面生成vmlinuz System.map
据说改了 /boot/grub/menu.lst重新启动 ,linode选pv-grub-x86-32
就能重新启动使用新内核了,但是我没试验成功,反正我是为了编译内核模块,又不是重新然linode好使,可能虚拟机还是和真实机器有莫名其买的差距吧,没深究
继续编译内核模块:
把新编译的源码链接到 系统已经存在的内核源码
其实不太对,但是两个都是3.8的差别还不算大,内核模块可用
回到罪恶的分割线上面的代码
表示内核已经正确装载了
lsmod查看模块
rmmod 删除模块
把上面ibm的的代码放到附件里了
树莓派编译网卡
编译内核模块的helloworld的例子如下
环境:
1.linode虚拟机
2.centos系统,其他系统都行
3.下面ibm的代码,sample.tar.gz
4.编译内核模块需要源码
参考链接
http://blog.csdn.net/tigerjb/article/details/6010997
http://www.ibm.com/developerworks/cn/linux/l-cn-kernelmodules/index.html
上代码
[root@li408-34 hello]# cat hello.c /* * $Id: hello.c,v 1.5 2004/10/26 03:32:21 corbet Exp $ * The code samples are covered by a dual BSD/GPL license from * Linux Device Drivers, Third Edition, by Jonathan Corbet, * Alessanfdro Rubini, and Greg Kroah-Hartman.Copyright * 2005 O鈥橰eilly Media, Inc., 0-596-00590-3. */ #include <linux/init.h> #include <linux/module.h> MODULE_LICENSE("Dual BSD/GPL"); static int hello_init(void) { printk(KERN_ALERT "Hello, haoning-------------\n"); return 0; } static void hello_exit(void) { printk(KERN_ALERT "Goodbye, cruel world\n"); } module_init(hello_init); module_exit(hello_exit);
Makefile
[root@li408-34 hello]# cat Makefile # To build modules outside of the kernel tree, we run "make" # in the kernel source tree; the Makefile these then includes this # Makefile once again. # This conditional selects whether we are being included from the # kernel Makefile or not. ifeq ($(KERNELRELEASE),) # Assume the source tree is where the running kernel was built # You should set KERNELDIR in the environment if it's elsewhere KERNELDIR ?= /lib/modules/$(shell uname -r)/build # The current directory is passed to sub-makes as argument PWD := $(shell pwd) modules: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules modules_install: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install clean: rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions \ *.order *.symvers .PHONY: modules modules_install clean else # called from kernel build system: just declare what our modules are obj-m := hello.o endif
★★★★★★★★★★★★★★★我是罪恶的分割线★★★★★★★★★★★
步骤:
环境linode
centos6
[root@li408-34 hello]# uname -a Linux li408-34 3.8.4-linode50 #1 SMP Mon Mar 25 15:50:29 EDT 2013 i686 i686 i386 GNU/Linux [root@li408-34 hello]# uname -r 3.8.4-linode50 [root@li408-34 hello]#
由于linode的内核都是自己编译的
上网查了一些自己编译内核的方法,但是还是启动报错
参考http://www.xiaozhou.net/ittech/vps-ittech/upgrade_linode_vps_kernel_manually-2011-04-28.htm
★这个写得很好,学习了
后来自己下了
linux-3.8.tar.xz xz -d linux-3.8.tar.xz tar xvf linux-3.8.tar cd linux-3.8 cp /proc/config.gz . gunzip config.gz mv config .config
这一步是用系统当前的config文件
作为内核的make menuconfig或者make config产生的文件
配置项太jb多了
然后可能需要改
CONFIG_PARAVIRT_GUEST=y CONFIG_XEN=y CONFIG_PARAVIRT=y CONFIG_PARAVIRT_CLOCK=y CONFIG_XEN_BLKDEV_FRONTEND=y CONFIG_XEN_NETDEV_FRONTEND=y CONFIG_HVC_XEN=y CONFIG_XEN_SCRUB_PAGES=y CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=y CONFIG_IP_NF_SECURITY=n CONFIG_IP6_NF_SECURITY=n
#rm -rf /boot/* 看好了,这里可能原来就有启动的东西了,还是别删了 #开始编译 make modules make #安装内核 make install make modules_install
然后就会在/boot下面生成vmlinuz System.map
据说改了 /boot/grub/menu.lst重新启动 ,linode选pv-grub-x86-32
就能重新启动使用新内核了,但是我没试验成功,反正我是为了编译内核模块,又不是重新然linode好使,可能虚拟机还是和真实机器有莫名其买的差距吧,没深究
继续编译内核模块:
ln -s /root/kernel/linux-3.8 /lib/modules/3.8.4-linode50/build
把新编译的源码链接到 系统已经存在的内核源码
其实不太对,但是两个都是3.8的差别还不算大,内核模块可用
回到罪恶的分割线上面的代码
[root@li408-34 hello]# ls Makefile hello.c [root@li408-34 hello]# pwd /root/kk/samples/hello [root@li408-34 hello]#
[root@li408-34 hello]# make make -C /lib/modules/3.8.4-linode50/build M=/root/kk/samples/hello modules make[1]: Entering directory `/root/kernel/linux-3.8' CC [M] /root/kk/samples/hello/hello.o Building modules, stage 2. MODPOST 1 modules CC /root/kk/samples/hello/hello.mod.o LD [M] /root/kk/samples/hello/hello.ko make[1]: Leaving directory `/root/kernel/linux-3.8' [root@li408-34 hello]#
[root@li408-34 hello]# lsmod Module Size Used by [root@li408-34 hello]# [root@li408-34 hello]# ls Makefile Module.symvers hello.c hello.ko hello.mod.c hello.mod.o hello.o modules.order [root@li408-34 hello]# insmod hello.ko [root@li408-34 hello]# lsmod Module Size Used by hello 606 0 [root@li408-34 hello]# [root@li408-34 hello]# cat /proc/modules hello 606 0 - Live 0xede36000 (O) [root@li408-34 hello]# [root@li408-34 hello]# cd /sys/module/hello [root@li408-34 hello]# ls coresize holders initsize initstate notes refcnt sections taint uevent [root@li408-34 hello]# tree -a . |-- coresize |-- holders |-- initsize |-- initstate |-- notes | `-- .note.gnu.build-id |-- refcnt |-- sections | |-- .gnu.linkonce.this_module | |-- .note.gnu.build-id | |-- .rodata.str1.1 | |-- .strtab | |-- .symtab | `-- .text |-- taint `-- uevent 3 directories, 13 files [root@li408-34 hello]# dmesg ..... Hello, world Goodbye, cruel world [root@li408-34 hello]# tail -f /var/log/messages Apr 11 11:37:59 li408-34 abrtd: Init complete, entering main loop Apr 11 11:37:59 li408-34 init: Failed to spawn hvc0 main process: unable to execute: No such file or directory Apr 11 11:42:23 li408-34 kernel: Hello, haoning------------- Apr 11 11:43:56 li408-34 kernel: Goodbye, cruel world Apr 11 11:44:12 li408-34 kernel: Hello, haoning------------- Apr 11 13:51:49 li408-34 kernel: Goodbye, cruel world Apr 11 13:51:59 li408-34 kernel: Hello, haoning------------- Apr 11 14:44:21 li408-34 yum[4371]: Installed: tree-1.5.3-2.el6.i686 Apr 11 15:05:21 li408-34 kernel: Goodbye, cruel world Apr 11 15:05:51 li408-34 kernel: Hello, world
表示内核已经正确装载了
lsmod查看模块
rmmod 删除模块
把上面ibm的的代码放到附件里了
- samples.tar.gz (17 KB)
- 下载次数: 0
发表评论
-
xl2tp 备份
2019-09-24 16:25 7332019年9月24日更新: 注意,需要开启firewall ... -
sdl笔记
2019-01-31 17:19 741sdl教程教程 https://github.com/Twin ... -
tinyemu
2019-01-24 17:59 1441参考https://bellard.org/jslinux/t ... -
aws搭建xl2tp给iphone使用
2018-12-26 21:37 19022019年12月26日 可以参考原来的配置 https:// ... -
consul的基本使用
2017-06-27 11:13 1409### 安装 [centos7上consul的安装](ht ... -
lvs的helloworld
2017-06-13 20:36 601###################lvs######### ... -
系统调用的helloworld
2017-05-04 16:14 660《2.6内核标准教程》 p293 #include < ... -
bitcoin和cgminer的安装
2017-04-05 22:45 1963参考 http://blog.csdn.net/rion_ch ... -
ceph安装和常用命令
2017-03-21 21:55 964/etc/hosts ssh-keygen ssh-copy- ... -
mobile terminal 笔记
2016-12-02 15:35 648找出旧的iphone4 越狱之后可以变个小操作系统 mobi ... -
socket基础和select(python)
2016-06-14 17:21 1807上接 c语言的socket基础ht ... -
socket基础(c语言)
2016-06-14 16:45 1007不使用select 普通的基础socket连接,对多个客户端的 ... -
ffmpeg+nginx 的直播(2,直播摄像头和麦克风)
2016-05-28 20:21 4385假设我的服务器是centos7 192.168.139.117 ... -
ffmpeg+nginx 的直播(1,直播播放的视频文件)
2016-05-26 17:11 661864位操作系统centos7 ############ 1.一 ... -
socat和netcat(nc)
2016-04-29 22:36 1756转 原文链接: http://www.wenquan.name ... -
neutron基础九(qemu nat网络)
2016-02-06 17:21 1630接上基础八,kvm透传nested忽略 1.在主机ce ... -
neutron基础八(qemu 桥接网络)
2016-02-06 13:13 1550qemu的桥接和nat的qemu启动命令是一样的,但是后续的脚 ... -
neutron基础七(qemu tap)
2016-02-02 17:02 1033使用qemu 建立个虚拟机 然后用tap设备, 根据基础六,t ... -
neutron基础六(bridge fdb)
2016-01-28 18:30 2280转发表 在三台机器上建立三个namespace 192.16 ... -
南北流量
2016-01-23 23:26 1837一、三层网络架构: 接入层:负责服务器的接入和隔离 汇聚层:汇 ...
相关推荐
- `make modules`: 编译内核模块。 - `make modules_install`: 将编译好的内核模块安装到系统中。 ### 二、内核模块编写 #### 2.1 模块文件结构 内核模块通常由一个或多个C源文件组成。对于本例中的“helloworld...
Ubuntu 12.04 编译内核...本文详细介绍了在 Ubuntu 12.04 下编译内核模块的步骤,从前期准备到编写 hello.c 文件和 Makefile 文件,再到编译、加载和卸载内核模块。通过这些步骤,可以轻松地编译和加载自己的内核模块。
【标题】: "08 内核模块Hello1" 涉及的知识点 【描述】: 描述中提到了深入理解UNIX系统内核、Linux设备驱动程序以及建立和运行Linux内核模块,这些都是与操作系统内核、设备驱动开发和内核模块编程相关的主题。 ...
`build-essential`包含了许多基础的编译工具,如GCC编译器,而`linux-header-$(uname -r)`则提供了当前运行内核的头文件,这些头文件是编译内核模块所必需的。 接下来,我们创建一个简单的内核模块,名为“hello...
Linux内核模块编程是Linux系统开发中的一个重要环节,它允许开发者在不重新编译整个操作系统内核的情况下,添加、修改或删除内核功能。这种方式极大地提高了系统的灵活性和可扩展性。下面将详细介绍Linux内核模块的...
输入以下命令,开始编译 hello world 内核模块: [root@localhost kernel-2.6.13]# make modules 编译结束后,会在 drivers/char/ 目录下生成可动态加载的内核模块 mini2440_leds.ko。 六、加载新内核 将要下载...
Linux内核模块编程是深入Linux操作系统核心的一种编程实践,它允许开发者动态地向内核添加代码(模块),而无需重新编译整个内核。这种机制极大地提高了系统的可扩展性和灵活性,使得增加、更新或删除特定功能成为...
关于多文件编译,当一个内核模块包含多个源文件时,我们需要一个Makefile来组织编译过程。一个基本的Makefile模板可能如下: ```makefile obj-m += hello.o KERNEL_DIR ?= /lib/modules/$(shell uname -r)/build ...
### 虚拟机VM Virtual Box 下 Ubuntu 编译内核与简单的Hello World模块的添加删除教程 #### 一、编译内核 ##### 1. 获取最新内核源码 - 首先访问[www.kernel.org](http://www.kernel.org),下载最新的Linux内核...
- 将编译好的内核模块复制到目标系统。 - 重启系统,确保`HelloWorld`模块能够在系统启动时自动加载。 #### 总结 以上步骤介绍了如何从零开始创建一个简单的`HelloWorld`内核驱动程序,并将其集成到Linux内核中...
Windows内核安全与驱动开发书的第一个示例程序,在新版本开发环境中调试通过,使用Visual Studio 2017加上WDK 1803环境编译。在调试过程中,由于x64驱动程序禁止使用嵌入汇编,采用Shellcode方式进行软件中断调用,...
确保所使用的Red Hat Enterprise Linux 5系统已经安装了必要的开发工具包(如GCC、make等),以及内核源代码,因为这些工具对于编译内核模块至关重要。 #### 实验步骤详解 ##### 步骤一:创建工作目录 在任意位置...
Linux内核模块是Linux操作系统中一个重要的组成部分,它允许用户在不重新编译整个内核的情况下,添加、修改或删除内核功能。这对于系统管理员和开发者来说是非常实用的,因为可以动态地扩展内核功能,而不需要每次...
例如,我们创建一个名为`hello_world.c`的内核模块,代码如下: ```c #include #include #include MODULE_LICENSE("GPL"); MODULE_AUTHOR("Your Name"); MODULE_DESCRIPTION("A simple kernel module example")...
对于初学者,从编写简单的“Hello World”模块开始,逐步理解内核模块的生命周期和工作原理。通过实践,不仅可以掌握内核模块的基本概念,还能深入理解Linux内核的内部工作机制,这对于Linux系统管理员和内核开发者...
"Hello World"内核驱动程序是一个简单的起点,它可以帮助初学者熟悉内核模块的构建过程。这里我们将深入探讨如何在Ubuntu 14.04上创建并编译一个"Hello World"内核驱动,以及涉及到的关键文件。 首先,`hello.c`是...
- **编译相关和内核版本相关的问题**:编译内核模块时需要注意内核头文件的版本与实际使用的内核版本一致,以确保模块能够正确编译并与内核兼容。 #### 三、Hello World 示例 本书通过一系列逐步深入的“Hello ...