linux内核代码的编写初步以及makefile的配置

在linux内核代码开发中,头文件不能包含标准C头文件,只能采用GNC标准

而且内核开发中没有main函数,只有init 和 exit ,这是每个内核模块中必须要包含的函数模块.

在GNU C标准中,打印信息采用printk函数,printk函数有8种级别.

内核模块的编译采用Makefile来编译,利用内核的module中的makefile来编译

#include <linux/init.h>

#include <module.h>

//GPL是一种开源协议,这个必须要添加

MODULE_LICENSE(“GPL”);

MODULE_AUTHOR(“XXX”);  //开发模块的作者信息  可选

MODULE_VERSION(“xxx”);  //模块的版本信息    可选

这里的 S_IRUGO=(S_IRUSR|S_IRGRP|S_IROTH)

S_IRUSR:用户读  00400

S_IRGRP:用户组读 00040

S_IROTH:其他读 00004

module_param_named(name, variable, type, perm);其中name是外部可见的参数名,variable是源文件内部的全局变量名,而module_param通过module_param_named实现,只不过name与variable相同。

 

Module_param(name ,int ,S_IRUGO);

 

int hello_init()

{

  printk("hello kernel");

}

 

Int hello_exit()

{

 printk("goodbye kernel");

}

 

//以下两个模块必须要添加

Module_init(hello_init);

Module_exit(hello_exit);

 

 

 

内核模块Makefile的编写

KERNELRELEASE是在内核源码的顶层Makefile中定义的一个变量,在第一次读取执行此Makefile时,KERNELRELEASE没有被定义,所以make将读取执行else之后的内容,如果make的目标是clean,直接执行clean操作,然后结束。当make的目标为all时,-C
$(KDIR)指明跳转到内核源码目录下读取那里的Makefile;M=$(PWD)表明然后返回到当前目录继续读入、执行当前的Makefile。当从内核源码目录返回时,KERNELRELEASE已被定义,kbuild也被启动去解析kbuild语法的语句,make将继续读取else之前的内容。else之前的内容为kbuild语法的语句,指明模块源码中各文件的依赖关系,以及要生成的目标模块名。param-objs

:= file1.ofile2.o表示param.o由file1.o与file2.o连接生成,obj-m
:= param.o表示编译连接后将生成param.o模块。

 

 

Ifneq ($(KERNELRELEASE))

param-objs := file1.o file2.o     //要编译的内核模块
obj-m := param.oelse          //编译成什么形式的.ko文件
KDIR := /lib/modules/2.6.18-53.el5/build     //指定内核模块需要使用内核源代码,并且指定相应的路径
All:
make -C $(KDIR) M=$(PWD) modules      //使用内核中的build的makefile来编译 modules
clean:
rm -f *.ko *.o *.mod  *.mod.c *.symvers     //清除
时间: 2024-08-03 08:51:34

linux内核代码的编写初步以及makefile的配置的相关文章

Linux内核代码中的脏话统计

按脏话数/版本号统计 按脏话密度/版本号统计 上图显示的是对Linux内核里的c,h和S源代码里的脏话统计结果,我会每月更新一次这些数据,当有新版本发布时也会更新一次.我是受the linux kernel fuck count的启发,但遗憾的是它里面的数据已经过期了. 从图中可以很明显的看出,自从2.4版开始,脏话的数量有大量的增加.然而,总的代码量也增加了很多,所以,总的来看,平均每行的诅咒密度是减少的. 介绍一下统计方法:不论任何地方出现的脏话词汇都会计入总数--出现在另一个词内也算.本来

linux内核代码- stubs_offse,stubs是什么意思

问题描述 stubs_offse,stubs是什么意思 W(ldr) pc, .LCvswi + stubs_offse 解决方案 字面上理解offset是偏移量 stub是存根 解决方案二: stubs_offset用处

十天学Linux内核之第十天---总结篇(kconfig和Makefile &amp; 讲不出再见)

原文:十天学Linux内核之第十天---总结篇(kconfig和Makefile & 讲不出再见) 非常开心能够和大家一起分享这些,让我受益匪浅,感激之情也溢于言表,,code monkey的话少,没办法煽情了,,,,,,,冬天的风,吹得伤怀,倒叙往事,褪成空白~学校的人越来越少了,就像那年我们小年之后再回家的场景一样,到处荒芜,然而我们的激情却不褪去,依然狂躁在实验室凌晨两点半的星空里,也许今天又会是这样的一年,不一样的是身边的人变成学弟学妹了,而我们几个大三老家伙依然在,为自己喜欢的事情,为

Ubuntu中为Android系统上编写Linux内核驱动程序实现方法_Android

        在智能手机时代,每个品牌的手机都有自己的个性特点.正是依靠这种与众不同的个性来吸引用户,营造品牌凝聚力和用户忠城度,典型的代表非iphone莫属了.据统计,截止2011年5月,AppStore的应用软件数量达381062个,位居第一,而Android Market的应用软件数量达294738,紧随AppStore后面,并有望在8月份越过AppStore.随着Android系统逐步扩大市场占有率,终端设备的多样性亟需更多的移动开发人员的参与.据业内统计,Android研发人才缺口至

在Ubuntu上为Android系统编写Linux内核驱动程序

在智能手机时代,每个品牌的手机都有自己的个性特点.正是依靠这种与众不同的个性来吸引用户,营造品牌凝聚力和用户忠城度,典型的代表非iphone莫属了.据统计,截止2011年5月,AppStore的应用软件数量达381062个,位居第一,而Android Market的应用软件数量达294738,紧随AppStore后面,并有望在8月份越过AppStore.随着Android系统逐步扩大市场占有率,终端设备的多样性亟需更多的移动开发人员的参与.据业内统计,Android研发人才缺口至少30万.目前,

Ubuntu中为Android系统上编写Linux内核驱动程序实现方法

在智能手机时代,每个品牌的手机都有自己的个性特点.正是依靠这种与众不同的个性来吸引用户,营造品牌凝聚力和用户忠城度,典型的代表非iphone莫属了.据统计,截止2011年5月,AppStore的应用软件数量达381062个,位居第一,而Android Market的应用软件数量达294738,紧随AppStore后面,并有望在8月份越过AppStore.随着Android系统逐步扩大市场占有率,终端设备的多样性亟需更多的移动开发人员的参与.据业内统计,Android研发人才缺口至少30万.目前,

2010年度报告:是谁在编写Linux内核?

Linux开发人员继续以快速的步伐推出新内核,但根据Linux基金会最近发布的一份报告显示,在过去的一年里,新代码的提交步调明显变慢了.该报告还指出,Linux内核开发的杰出贡献者也在发生变化,越来越多的移动开发人员加入到Linux内核开发队伍,这是Linux基金会第三次年度"谁在写Linux"报告,总结了过去一年来Linux内核的进展情况. 根据2010年"谁在写Linux"报告显示,提交给2.6.35内核的代码量比去年发布的2.6.30内核的代码量少18%,过去

你知道 Linux 内核是如何构建的吗?

介绍 我不会告诉你怎么在自己的电脑上去构建.安装一个定制化的 Linux 内核,这样的资料太多了,它们会对你有帮助.本文会告诉你当你在内核源码路径里敲下make 时会发生什么. 当我刚刚开始学习内核代码时,Makefile 是我打开的第一个文件,这个文件看起来真令人害怕 :).那时候这个Makefile 还只包含了1591 行代码,当我开始写本文时,内核已经是4.2.0的第三个候选版本 了. 这个 makefile 是 Linux 内核代码的根 makefile ,内核构建就始于此处.是的,它的

如何向 Linux 内核提交驱动

当Linux驱动程序开发到一定阶段,向kernel.org提交代码是一个很好的选择.对于很多没有向上游提交过代码的开发者来说,还是有很多疑问需要解决的.比如,究竟我们向哪里提交驱动程序?提交时我们的代码应该处于什么状态?提交的过程又如何呢? 向哪里提交 Linux staging tree是Greg KH建立的用于提交驱动程序的git仓库.我们可以把staging tree看作是代码进入mainline内核之前的一个预科班,新增的驱动程序首先需要放到这里供社区review和测试.Staging