嵌入式Linux系统的组成
bootloader
Linux 内核
根文件系统
1. bootloader
目的:启动内核
去哪里读内核? 去flash等外设读内核
写到哪里? 写到内存里
所以需要有flash外设的驱动能力,为了调试方便还会有网络功能
可以认为 bootloader = 裸机集合 其实就是一个复杂的单片机程序
2.Linux内核
目的:启动APP
APP保存在哪里? 存在根文件系统里
根文件系统保存在哪里? 在flash或SD卡/网络上,所以Linux要有flash SD卡的驱动能力
Linux内核 还应该有进程调度 内存管理
总结 Linux内核 = 驱动集合+进程调度+内存管理
Bootloader
boot loader 有很多种,常用的有u-boot
在实际工作中,对于u-boot基本上是修修改改,甚至不改。但是u-boot本身是很复杂的,比如为了便于调试,它支持网络功能;有些内核是保存在FAT32分区里,于是它要能解析FAT32分区,读FAT32分区的文件。
理解u-boot的作用、会使用u-boot的命令,这就可以了
要学习Linux内核、要学习驱动程序吗
Linux内核 = 驱动集合+进程调度+内存管理
如果要学习Linux内核,从驱动程序入手是一个好办法
作为初学者,懂几个简单的驱动程序,有利于工作交流;理解中断、进程、线程的概念,无论是对驱动开发、应用程序开发,都是很有好处的。
所以对于初学者,建议前期只学习这几个驱动:LED、按键、中断。
-
LED驱动程序:
这是最简单的驱动程序。 -
按键驱动程序:
它也比较简单,从它引入“中断”。 -
中断:
从“中断”它可以引入:休眠-唤醒、进程/线程、POLL机制、异步通知等概念。这些概念无论是对驱动开发,还是对应用开发,都很重要所以,对于初学者,我建议必须学习这几个驱动:LED、按键、中断。
入门之后,如果你想从事内核开发、驱动开发,那么可以去钻研几个驱动程序(输入系统、I2C总线、SPI总线等),掌握若干个大型驱动程序后,你对内核的套路就有所了解了,再去研究其他部分(比如进程管理、文件系统)时你会发现套路是如此通用。
摄像头(VL42)、声卡ALSA驱动是Linux中比较复杂的2类驱动,它们是很难的,如果工作与此相关再去研究。
学习Linux应用程序,先学会一些基础技能
1.基本的设备访问,比如LCD,输入设备
2.进程,线程,进程通信,线程同步与互斥
3.休眠与唤醒,POLL机制,信号
4.网络编程
前三个跟驱动有着密切的关系。