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

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

1linux内核编程和用户应用程序编程最大的不同是,前者是在内核态下运行的,而后者主要在用户态下运行,有时通过一些系统调用切换到内核态下运行,但这时间不会太长。

2内核编程引进的头文件都在内核源码的include文件夹下,比如我的debian linux 26环境下是:/usr/src/linux/include下,而用户应用程序编程引进的头文件都是从开发环境头文件的include文件夹下,比如我的环境下是:/usr/include下。也就是凡是要include的头文件在内核源码include底下没有的都不能用。

3要查询一个函数能否在内核编程中用,可以通过>

真佩服楼上的2位对“内核编程”的理解力!

简单说,Linux内核编程就是开发Linux驱动程序,学会内核编程后,将会对 *** 作系统的内部机制和工作原理有充分了解,可以从事硬件驱动开发、嵌入式系统开发等。内核编程的语言仍是传统的C语言,但其编写方法和调用接口与传统应用程序的差别较大,你必须了解如何处理中断、如何在内核态和用户态之间转换、PCI、DMA、内核地址映射、内核I/O等,这不是《UNIX高级编程》所涉及的内容,可以找一本专门讲Linux驱动编程的书看看,或在网上搜寻相关资料(关键词:Linux DDK)。不过先提醒一句,学习内核编程的难度很大,必须做好长期心理准备

内核的初始化过程由start_kernel函数开始,至第一个用户进程init结束,调用了一系列的初始化函数对所有的内核组件进行初始化。其中,start_kernel、rest_init、kernel_init、init_post等4个函数构成了整个初始化过程的主线。

从start_kernel函数开始,内核即进入了C语言部分,它完成了内核的大部分初始化工作。实际上,可以将start_kernel函数看做内核的main函数。

在start_kernel函数的最后调用了rest_init函数进行后续的初始化。

(1)rest_init中调用kernel_thread函数启动了2个内核线程,分别是:kernel_init和kthreadd

(2)调用schedule函数开启了内核的调度系统,从此linux系统开始转起来了。

rest_init最终调用cpu_idle函数结束了整个内核的启动。

kernel_init函数将完成设备驱动程序的初始化,并调用init_post函数启动用户空间的init进程。

到init_post函数为止,内核的初始化已经进入尾声,第一个用户空间进程init将姗姗来迟

如果内核命令行中给出了到init进程的直接路径(或者别的可替代的程序),这里就试图执行init。

init:开始是内核态,后来转变为用户态

init进程完成了从内核态向用户态的转变

init进程在内核态下面时,通过一个函数kernel_execve来执行一个用户空间编译连接的应用程序就跳跃到用户态了。

在init/mainc中最后会通过kernel_execve()来调用用户空间的init进程(如/sbin/init, /etc/init, /bin/init等

uboot通过传参来告诉内核这些信息。

uboot传参中的root=/dev/mmcblk0p2 rw 这一句就是告诉内核根文件系统在哪里

uboot传参中的rootfstype=ext3这一句就是告诉内核rootfs的类型。

以上就是关于请简要叙述内核编程的注意点即和普通应用程序编程的不同之处全部的内容,包括:请简要叙述内核编程的注意点即和普通应用程序编程的不同之处、什么叫做内核程序设计,什么叫做外核程序设计,分别有哪些经典的书籍、什么是LINUX内核编程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9712914.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存