首页 编程 正文

内核态编程-内核模块编程

编程 131

文章信息一览:

请简要叙述内核编程的注意点即和普通应用程序编程的不同之处

内核编程既不能访问C库也不能访问标准的C头文件。内核编程时必须使用GNU C。内核编程缺乏像用户空间那样的内存保护机制。内核编程时难以执行浮点数运算。内核给每个进程只有一个很小的定长堆栈。由于内核支持异步中断、抢占和SMR,因此必须时刻注意同步和并发。要考虑可移植性的重要性。

无区别,只不过编译器不一样罢了。因为不同的cpu构架有不同的指令集。而嵌入式基本使用RISC结构的cpu,需要使用pc上的cpu编译出在能嵌入式cpu上运行的二进制程序。这叫交叉编译。pc上的程序不可以直接在其他cpu上运行,需要重新编译。因为编译器不一样,执行的c语言标准就跟编译器相关。

内核态编程-内核模块编程
(图片来源网络,侵删)

内核程序是运行在Ring0级的,因此内核程序要比应用层上的普通Ring3级程序有更高的权限。因此内核编程的应用,往往给传统软件带来更强的功能,实现技术上的飞跃。同理,黑客们也将传统的攻击程序或潜行程序从Ring3搬到了Ring0级去,以便于更隐蔽、更有效的监视或控制目标系统(如Rootkit)。

因此内核编程的应用,往往给传统软件带来更强的功能,实现技术上的飞跃。举个例子。我们常常听说,对文件进行加密,可以使文档更加安全。对文件加密并不需要任何内核组件。我们可以写一个应用程序,读入文件,加密数据,然后重写为一个加密文件。解密也可以同样如此。但是实际上这并不满足一般的用户需求。

Linux内核编程的目录

1、请在http://里找一个合适的下载点,再到pub/linux/kernel/v6/目录下去下载23内核。代码目录结构 在阅读源码之前,还应知道Linux内核源码的整体分布情况。现代的操作系统一般由进程管理、内存管理、文件系统、驱动程序和网络等组成。

内核态编程-内核模块编程
(图片来源网络,侵删)

2、Linux-headers是Linux的开发头文件,应该位于/usr/include/linux里面。不过有的系统习惯放/usr/src里面一分(这种情况很少,因为正规的地方是/lib/modules/内核版本/的某个目录,印象里是他的build里),因为有的软件去这里寻找当前内核的源代码来调用当前源代码的header进行编译。

3、是在/boot目录下 /usr/src目录一般是系统内核代码目录 你看/boot/grub/grub.conf文件,kernel那行是vmlinuz...,就是代表内核的名字 Linux是一个一体化内核(monolithic kernel)系统。“内核”指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。

4、随便就行,/usr/src/linux 放当前运行中的内核源代码的习惯你可以遵守,也可以不遵守。只不过是一些软件在编译时会固定到这里找内核源代码的相关数据来保证自己的内核模块可以正确编译。不过有些时候 /usr/module 里面的内核目录里面也有到你的源代码目录的链接。很多软件两个地方找到一个就能继续编译。

关于内核态编程,以及内核模块编程的相关信息分享结束,感谢你的耐心阅读,希望对你有所帮助。

扫码二维码