▍PART 03

做驱动,其实不能称为“做驱动”,而是可以称为“做底层系统”,做好了这是通杀各行业。比如一个人工作几年,做过手机、IPTV、会议电视,但是这些产品对他毫无差别,因为他只做底层。当应用出现问题,解决不了时,他就可以从内核角度给他们出主意,提供工具。做底层的发展方向,应该是技术专家。

▍PART 04

其实,做底层还是做应用,之间并没有一个界线,有底层经验,再去做应用,会感觉很踏实。有了业务经验,再了解一下底层,很快就可以组成一个团队。

02

嵌入式 Linux 底层系统包含哪些东西?

嵌入式 LINUX 里含有 bootloader, 内核, 驱动程序、根文件系统这 4 大块。

一、bootloader

它就是一个稍微复杂的裸板程序。但是要把这裸板程序看懂写好一点都不容易。Windows 下好用的工具弱化了我们的编程能力。很多人一玩嵌入式就用 ADS、KEIL。能回答这几个问题吗?

Q:一上电,CPU 从哪里取指令执行?

A:一般从 Flash 上指令。

Q:但是 Flash 一般是只能读不能直接写的,如果用到全局变量,这些全局变量在哪里?

A:全局变量应该在内存里。

Q:那么谁把全局变量放到内存里去?

A:长期用 ADS、KEIL 的朋友,你能回答吗?这需要“重定位”。在 ADS 或 KEIL 里,重定位的代码是制作这些工具的公司帮你写好了。你可曾去阅读过?

Q:内存那么大,我怎么知道把“原来存在 Flash 上的内容”读到内存的“哪个地址去”?

A:这个地址用“链接脚本”决定,在 ADS 里有 scatter 文件,KEIL 里也有类似的文件。但是,你去研究过吗?

Q:你说重定位是把程序从 Flash 复制到内存,那么这个程序可以读 Flash 啊?