Linux驱动开发系列之二:第一个linux驱动hello word程序

see also: http://www.cyberciti.biz/tips/compiling-linux-kernel-module.html

 

 

 

 

 一个内核模块不是一个可以独立执行的文件,而是需要在运行时刻连接入内核的目标文件。所以,它们需要用-c 选项进行编译。而且,所有的内核模块都必须包含特定的标志:

 __KERNEL__——这个标志告诉头文件此代码将在内核模块中运行,而不是作为用户  进程。

 MODULE——这个标志告诉头文件要给出适当的内核模块的定义。

 LINUX——从技术上讲,这个标志不是必要的。但是,如果你希望写一个比较正规的内核模块,在多个操作系统上编译,这个标志将会使你感到方便。它可以允许你在独立  于操作系统的部分进行常规的编译。

  还有其它的一些可被选择包含标志,取决于编译模块是的选项。 如果你不能明确内核怎 样被编译,可以在  in/usr/include/linux/config.h 中查到。

 

 __SMP__——对称多线程。在内核被编译成支持对称多线程(尽管在一台处理机上运

  行)是必须定义。如果是这样,还需要做一些别的事情(参见第 12 章)。

 CONFIG_MODVERSIONS——如果 CONFIG_MODVERSIONS 被激活,你需要在编译

  是定义它并且包含文件/usr/include/linux/modversions.h。这可以有代码自动完成。

 

 

 

函数 printk 是由 Linux 内核定义的,功能与 printf 相似;模块可以调用 printk,这是因为在insmod 加载了模块后,模块就被连编到内核中了,也就可以调用内核的符号了。

通过执行 insmod 和 rmmod 命令,你可以试试这个模块。注意,只有超级用户才能加载和卸载模块。

另外,可以用dmesg命令查看printk的输出日志。lsmod列举内核模块及引用计数。相当于cat /proc/modules的格式化输出,

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值