分类: 嵌入式
2012-01-21 19:29:33
前面两章就先不说了,都比较基础,从第三章开始讲吧。
这里只列自己不熟悉的地方。
在讲内核组成部分的时候,在进程调度里面提到,在设备驱动编程中,当请求的资源不能得到满足时,驱动一般会调度其他进程执行,其对应进程进入睡眠状态,直到他请求的资源被释放,才会被唤醒而进入就绪态。
内核线程启动函数:kernel_thread。
图3.2是一副比较好的进程状态图。
每个进程有4G进程空间,0~3是用户的,3~4是内核的。
CPU通常提供多个工作模式,但Linux只用了两个,分别是内核和用户。Linux只能通过系统调用和硬件中断完成从用户空间到内核空间的控制转移。
不懂Kconfig和Makefile,怎么敢说自己会Linux编程。书上说了一些基本的规则:
(1)Makefile的目标定义是定义那些内容要做微模块编译
obj_m += xxx.o
哪些要连接进内核: obj_y += xxx.o
其他都不会被编译。
(2)Makefile更多时候需要根据.config文件来定义编译方式,
如obj_$(CONFIG_ISDN) += isdn.o
注意,除了这里提到的,还有其他目标定义的方式如lib_y xxx等等。
对于Kconfig的规则就不说了,需要的时候另行可以查阅。注意每个选项都有类型的,如bool、string、tristate、hex和int。
后面讲到内核启动,zImage不是完全是压缩的,他包含未被解压缩的部分,即解压程序(有gzip的解压代码)。