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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于linux内核里增加源代码编译的所有评论