内核编程实验

内核编程实验

ID:26491345

大小:68.00 KB

页数:13页

时间:2018-11-27

内核编程实验_第1页
内核编程实验_第2页
内核编程实验_第3页
内核编程实验_第4页
内核编程实验_第5页
资源描述:

《内核编程实验》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、内核编程实验:hello.c《Linux设备驱动程序》    内核编程入门,就以最为简单的hello.c为例。   环境:Redhat9.0,内核版本2.4.20-8。    虽然现在2.6.x的内核很早就就发布了,但是毕竟很多公司还在使用2.4.x的内核。作为新手,从2.4.x的内核入手是可行的。原因有如下几条:   (1)2.4.x比较成熟。可能你遇到的绝大多数问题,网上都有解决方案。在这个过程中,你可以节省大量的时间,同时还可以对比网上的解决方案,加深认识,总结解决问题的方法,调整自己的学习方法和思路。   (2)事物的发展总不可能是一蹴而就

2、的。了解发展的历程,对深入理解问题有很大的好处。所以在2.4.x的内核的基础上学习2.6.x的内核,就能够体会到2.6.x的内核在哪些方面要出色,或者为什么要采取这种改进技术。相信理论清晰了,即时2.6.x的内核也会容易上手。    下面总结了第一个内核程序hello.c的学习过程。 (一)第一阶段:尽量简单 /* *hello.c */#defineMODULE#includeintinit_module(void){        printk("HelloWorld!");        return0;}

3、voidcleanup_module(void){        printk("Goodbye!");}执行,出现错误一:[root@lqmdrivers]#gcc-chello.c[root@lqmdrivers]#insmodhello.ohello.o:kernel-moduleversionmismatch        hello.owascompiledforkernelversion2.4.20        whilethiskernelisversion2.4.20-8.   这是因为内核源代码版本和编译器版本不一致造成的。

4、(1)编译器版本/usr/include/linux/version.h#defineUTS_RELEASE"2.4.20"#defineLINUX_VERSION_CODE132116#defineKERNEL_VERSION(a,b,c)(((a)<<16)+((b)<<8)+(c))(2)内核源代码版本/usr/src/linux-2.4.20-8/include/linux/version.h/usr/src/linux-2.4.20-8/include/linux[root@lqmlinux]#catversion.h#include

5、inux/rhconfig.h>#ifdefined(__module__smp)#defineUTS_RELEASE"2.4.20-8smp"#elifdefined(__module__BOOT)#defineUTS_RELEASE"2.4.20-8BOOT"#elifdefined(__module__bigmem)#defineUTS_RELEASE"2.4.20-8bigmem"#else#defineUTS_RELEASE"2.4.20-8"#endif#defineLINUX_VERSION_CODE132116#defineKERN

6、EL_VERSION(a,b,c)(((a)<<16)+((b)<<8)+(c))  可以采取修改编译器版本号与内核源代码版本号一致的办法来解决这个问题,即修改/usr/include/linux/version.h中#defineUTS_RELEASE"2.4.20"为#defineUTS_RELEASE"2.4.20-8"执行,出现错误二:[root@lqmdrivers]#gcc-chello.c[root@lqmdrivers]#insmodhello.oWarning:loadinghello.owilltaintthekernel:no

7、license  Seehttp://www.tux.org/lkml/#export-taintedforinformationabouttaintedmodulesModulehelloloaded,withwarnings[root@lqmdrivers]#tail-n1/var/log/messagesJan3012:02:08lqmkernel:Hello    也就是说出现了nolicense的警告。GNU的软件需要有GPL,所以修改源代码如下:/* *hello.c */#defineMODULE#include

8、le.h>MODULE_LICENSE("GPL");intinit_module(void){        print

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。