一.单独编写C文件,并编写一个对应这个C文件的Makefile文件
二.利用linux内核源代码,编写C文件,修改相应的目录中的Makefile文件
一.
1)编写内核模块helloworld.c文件(可以随意建立一个文件夹,操作的时候进入文件夹内就OK!)
2)编写Makefile文件
3)编译内核模块
执行make,生成相应的helloworld.ko文件
4)加载helloworld模块到内核中
insmod helloworld.ko
5)查看加载的内核模块
lsmod
6)卸载内核模块
rmmod helloworld
二. 此方法的前提是要下载一个内核源代码并解压,然其ARCH=X86,CORSS_COMPLIE=gcc,也就是说彩默认的
1)将helloworld.c文件拷贝到../linux-XXXX/drivers/char/目录下
2)修改/drivers/char/目录下的Makefile文件,添加obj-m += helloworld.o
3)退回到内核源代码根目录,执行make modules.完成后将会在/drivers/char/目录下,生成helloworld.ko文件.
4)将helloworld.ko复制放到任意文件夹内,进入此文件夹,然后执行insmod helloworld.ko.
发现出现问题:
说模块格式无效,用file查看这个helloworld.ko与前面一种方法生成的helloworold.ko文件发现完全相同.初步认为由于编译的linux内核版本与PC机上运行的linux系统版本不同造成的.
因为我这里PC机上的版本是linux-2.6.25-14.fc9.i686(可在/lib/modules/下看到),而我编译的内核为linux-2.6.32,
也就是说内核拒绝加载我的模块,是因为记载版本号的字符串不符,可以通过modinfo命令查看.
解决方法:
最好的办法就是找与PC上linux系统相同版本的内核作编译.
另外也是有别的办法,具体百度查~~~~
阅读(3283) | 评论(0) | 转发(1) |