Chinaunix首页 | 论坛 | 博客
  • 博客访问: 365156
  • 博文数量: 135
  • 博客积分: 425
  • 博客等级: 下士
  • 技术积分: 599
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-19 21:10
文章分类
文章存档

2014年(3)

2013年(79)

2012年(53)

分类:

2012-11-20 21:26:43

两种方法:
  一.单独编写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系统相同版本的内核作编译.
    另外也是有别的办法,具体百度查~~~~
阅读(325) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~