【Linux 驱动】驱动开发第一步(2)

                                    /usr/src/linux-source-3.0.0/include/linux/in.h

2)另外,如果你的模块需要用到参数传递,那么你可能就要声明moduleparam.h这个头文件了。

3)模块里常包含一些描述性声明,如:

MODULE_LICENSE("GPL");          // "GPL" 是指明了 这是GNU General Public License的任意版本

                                                            // “GPL v2” 是指明 这仅声明为GPL的第二版本

                                                            // "GPL and addtional"

                                                            // "Dual BSD/GPL"

                                                            // "Dual MPL/GPL"

                                                            // "Proprietary"  私有的

                                                            // 除非你的模块显式地声明一个开源版本,否则内核会默认你这是一个私有的模块(Proprietary)。

MODULE_AUTHOR                        // 声明作者

MODULE_DESCRIPTION              // 对这个模块作一个简单的描述,这个描述是"human-readable"的

MODULE_VERSION                        // 这个模块的版本

MODULE_ALIAS                               // 这个模块的别名

MODULE_DEVICE_TABLE            // 告诉用户空间这个模块支持什么样的设备


       MODULE_声明可以写在模块的任何地方(但必须在函数外面),但是惯例是写在模块最后。

4)

Linux KERN_ALERT 什么意思

消息打印级别:
fmt----消息级别:

#define KERN_EMERG     "<0>"
#define KERN_ALERT     "<1>"
#define KERN_CRIT      "<2>"
#define KERN_ERR       "<3>"
#define KERN_WARNING   "<4>"
#define KERN_NOTICE    "<5>"
#define KERN_INFO      "<6>"
#define KERN_DEBUG     "<7>"

 

不同级别使用不同字符串表示,数字越小,级别越高。
printk输出跟输出的日志级别有关系,当输出日志级别比控制台的级别高时,就会显示在控制台上,当比控制台低时,则会记录在/var/log/message中.但是当系统同时运行了klogd和syslogd时,都追加到/var/log/message.在/proc/sys/kernel/printk文件中,前两个整数为当前的日志级别和默认的日志级别(默认的日志级别即为printk的输出级别). 

注意:
需要开启klogd和syslogd服务才能正常输出。通过klogd可以改变系统消息输出级别。

linux0.11为什么在内核态使用printk()函数,而在用户态使用printf()函数?
(1)    答:printk()函数是直接使用了向终端写函数tty_write()。而printf()函数是调用write()系统调用函数向标准输出设备写。所以在用户态(如进程0)不能够直接使用printk()函数,而在内核态由于他已是特权级,所以无需系统调用来改变特权级,因而能够直接使用printk()函数。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://127.0.0.1/wyyxdp.html