主要是想学一下Linux内核,所以搭一套环境,其实有几个选择,好几个都是我买了板子的。
首先是正点原子的RK3568,最早是想弄安卓,但是SDK的大小真的把我劝退了,动不动几百个G的空间,还有就是保底16个G的内存。我买的云可没那么豪华的配置。配套的Linux环境也不算小。不过也有好处,配套的中文资料挺多的。可以作为备选。
然后就是Openwrt。说实话,Openwrt也是不错的选择,资料也不少,搞得熟练了就靠这个找个活干也是稳稳的,但是Openwrt没有太合适的开发板。。。
还有一个就是之前买的一本linux驱动的书,是华清远见出的,配套的是一个三星arm的Exynos4412板子,但是看了下那个板子要500块。而且感觉小众了点。
最后还是选的树莓派,本来是买了一个树莓派Zero 2W,价格不贵100大元。资料多而且空间占用小。结果后面又在家里翻出来一个树莓派3B,查了一下7年前买的3B性能比Zero还强了不少。于是把zero又给退了,还是用3B。姑且就叫它黄忠吧。。。
整个空间只用了1.8G,编译时间也能接受。唯一有点缺点就是没有现成的基于树莓派驱动开发的书,起码现在我还没看到。这个我想能克服吧。
其实最后还有个隐藏选项,就是现在单位用的高通。但是那堆垃圾我是真的无力吐槽,一套SDK700G,编译5个小时打底。真的是极不友好,火速劝退。
下载代码还是很easy
sudo apt-get install git bc bison flex libssl-dev make
git clone --depth=1 https://github.com/raspberrypi/linux
KERNEL=kernel7
make bcm2709_defconfig
make -j$(nproc) zImage modules dtbs
但是我这里遇到两个坑。
1 是说在x86下面找不到bcm2709_defconfig,看了一下原来是平台没选。我是直接改的根Makefile,改了个
ARCH ?= arm
2 交叉编译环境有点问题
找到arm gcc的位置,expert一下就可以了。
export CROSS_COMPILE=/usr/bin/arm-linux-gnueabihf-
这样编译就没啥问题了。
做image和烧写待续。。。
4. 打包成.img文件
编译完成后,你需要将内核和相关文件打包成一个.img文件。这个过程比较复杂,通常需要创建一个完整的Raspberry Pi文件系统。你可以使用现成的工具如 pi-gen
来生成一个完整的Raspberry Pi镜像。
git clone https://github.com/RPi-Distro/pi-gen.git
cd pi-gen
按照 pi-gen
的文档进行配置和编译。
5. 将.img文件传回本地
编译完成后,你需要将生成的.img文件传回本地。你可以使用 scp
命令来完成这个任务。
scp user@remote_server:/path/to/your/image.img /local/path/to/save/image.img
6. 烧录.img文件到SD卡
在本地使用 dd
命令或其他工具(如 Etcher)将.img文件烧录到SD卡。
使用 dd
命令
首先,找到你的SD卡设备名(如 /dev/sdX
或 /dev/mmcblkX
)。
sudo dd if=/local/path/to/save/image.img of=/dev/sdX bs=4M status=progress
sudo sync
使用 Etcher
- 下载并安装 Etcher.
- 打开 Etcher,选择你的.img文件和目标SD卡,然后点击“Flash”按钮。