作为一个(曾经的)内核开发者,弄到块板子怎么能不重新编译内核?系统配好跑起来后的第二件事,就是编译内核了。在树莓派上编译内核很简单,基本上就是按照官方文档跑脚本,先放GitHub上的Script传送门,build/kernel.sh
系统简介
文件系统
树莓派的文件系统设计还是不错的,能比较方便地更新内核和各种固件。整个文件系统分为两个部分:Fat32分区和Ext4分区。Fat32分区是mount到/boot上的,里面放了内核和启动的核心固件;Ext4就是一般的根文件系统了,放其他的所有东西,包括firmware和各种ko等。这种设计免去了用户烧录的麻烦,只是他们的bootloader没有开放源码,对于极客来说是很不爽的事情。
所谓的系统更新,就是每次编译kernel之后,直接把生成的文件放到特定的地方,重启就行。这也是为什么系统自带的工具rpi-update可以自动更新内核、firmware等等一切东西。
硬件的选择和启动
树莓派一代和二代用的两个不同的ARM芯片,这个差别在操作系统中并没有体现出来,我是指:官方提供的系统镜像是同一个。开始我很奇怪,后来看到了它的文件系统,才明白,它是靠不同的kernel文件名来区分的。这两种板子的platform分别叫”bcm2708”和”bcm2709”,启动的时候bootloader会根据硬件情况自动区分,读取不同的kernel image,进而load不同的firmware和driver。