快速业务通道

linux内核里增加源代码编译

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-13
接将内核源代码的头文件加入到usr/include目录中,并不能正常编译通过,这个问题也不内核开发包没装的问题







可行编译方法:
编译选项的话,应该是在相应目录下面的Kconfig里面添加.
以下文字摘自《Linux设备驱动开发详解》
在Linux内核中增加程序需要完成以下3项工作.
1 将编写的源文件复制到Linux内核源代码的相应目录中
2 在目录的Kconfig文件中增加新源代码对应的编译选项
3 在目录的Makefile里面增加对新代码的编译条目
举例:
1 假设有一个新的驱动globalmem.c,将该文件放到了linux-2.6.26/drivers/char目录下面
2 然后修改该目录下的Kconfig
增加
config GLOBALMEM
tristate "globalmem y/m/n"
default m //编译时的默认选项
help
xxxxxxx
3 然后修改目录下的Makefile
增加
obj-$(CONFIG_GLOBALMEM) = globalmem.o //这一行严格如此,大写部分不能用小写,否则无法生存目标.o文件

单独编译一个模块的话,要把内核的模块支持功能开启,才能独立编译成模块
编译流程如下
#cd /usr/src/linux
#make clean
#make allnoconfig
#make menuconfig
打开模块支持项,选上要独立编译的模块,保存配置文件
#cp .config ../oldconfig //保存配置文件 这一步可选
#make oldconfig
#make //会生成模块对应的中间文件 (源文件为globalmem.c,其中间文件为globalmem.o)
#make modules //生成模块文件 globalmem.ko //这一步也可以不用做,我们只需要globalmem.o文件

编译完成后,insmod globalmem.ko会有出错提示
insmod: error inserting ''globalmem.ko'': -1 Invalid module format
一般出现这种错误,是makefile文件不对的问题 //makefile文件格式例子如下

# Makefile2.6
ifneq ($(KERNELRELEASE),)
#kbuild syntax. dependency relationshsip of files and target modules are lis ted here.
mymodule-objs := globalmem.o
obj-m := globalmem.o
else
PWD := $(shell pwd)
KVER ?= $(shell uname -r)
KDIR := /lib/modules/$(KVER)/build
all:
make -C $(KDIR) M=$(PWD)
clean:
rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions //这一行不能顶头,前面需要一个tab位,否则在make的时候,会出现遗漏分隔符的出错提示!
endif

将globalmem.o和Makefile文件copy到同一个目录下,执行make命令,能正常生成globalmem.ko文件
#insmod globalmem.ko
XXXXXXXXXXXXXdevice or resource busy!
问题:系统上有个主设备号为254的设备,而globalmem.c源代码中定义的主设备号也为254,两者冲突!
解决办法:将globalmem.c中#define GLOBALMEM_MAJOR 254 改成#define GLOBALMEM_MAJOR 259
保证主设备号在系统中是唯一的!然后整个过程重作一遍!




另外一种可行的编译方法: //此方法不推荐
将整个内核源代码加入globalmem.c(修改过主设备号的)后,按照 boot目录下自带的config文件,在内核配置的时候再选上globalmem,然后重新编译,也是可以的 !!!

本文出自 “技术开源” 博客,请务必保留此出处http://hellencdh.blog.51cto.com/2566445/458025

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号