写一个linux内核模块(Linux Kernel Module)【一】

文章翻译自:

http://derekmolloy.ie/writing-a-linux-kernel-module-part-1-introduction/

http://derekmolloy.ie/writing-a-linux-kernel-module-part-2-a-character-device/

我想写一个linux内核模块,让他可以跟我的用户程序一起工作:一个普通的.c程序可以调用printk之类的内核函数。但是我找不到太多的教程,上面这个链接是我找到比较新的教程。

一、写一个可加载内核模块loadable kernel module (LKM)

一个可加载内核模块loadable kernel module (LKM)是一种运行时给linux kernel添加或者删除代码的机制。非常适合用来做设备驱动器,可以让内核在不知道硬件具体细节的情况下与硬件通信。如果不用LKM,就只能把每个驱动器的代码写进kernel里面。

linux kernel就会变得十分臃肿。如果你想添加新的硬件或者升级驱动器,你就要重新build整个kernel。LKM在运行时加载,但是并不在用户空间执行,他们实质上是内核的一部分。

内核空间和用户空间有各自独立的内存地址空间。通过超级用户与普通用户权限的保护机制,内核可以防止不同的用户程序彼此冲突。

用嵌入式linux的时候你要使用sysfs和低级的文件操作与电路板通信。在linux用户空间用pthreads、回调函数和sys/poll.h实现。但是也可以用内核代码,可以支持中断

内核模块的特点(区别于用户程序):

  • 并不会顺序执行,而是事件驱动。
  • 并不会自动回收资源
  • 不能使用printf(),但是可以使用printk()
  • 比用户程序有更高的执行优先级
  • 不支持浮点数

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值