机顶盒B860AV2.1改造为Ubuntu服务器(二)S905L-B移植主线Linux
机顶盒B860AV2.1改造为Ubuntu服务器(二)S905L-B移植主线Linux
简介
上一篇我们给一个中兴的电视机顶盒B860AV2.1移植了最新版的主线Uboot,这次我们来移植主线Linux。
Linux启动需要Uboot引导,Uboot的主要功能是初始化包括DDR在内的一部分外设,再将Linux内核和设备树文件一起加载到内存中,最终启动Linux系统。这一章我们就来通过编译Linux源代码生成适配机顶盒主板S905L-B的Linux内核文件和对应的设备树文件。
配置和编译主线Linux
下载主线Linux源码
git clone https://github.com/torvalds/linux.git
安装跨编译器gcc-aarch64-linux-gnu和device-tree-compiler用于编译源码和设备树。
修改配置并编译
s905是晶晨的64位四核A53 CPU,对应Linux下的架构分类是arm64,Linux源代码下载完后可以查看里面arm64架构下面有哪些配置。
ls arch/arm64/configs

因为主线Linux没有专门给s905搞一个配置文件,因此只有使用通用默认配置文件defconfig作为初始配置,然后需要再手动根据板子和芯片调整一些编译项。
# 配置架构和编译器
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
# 使用defconfig作为初始配置
make defconfig
# 手动配置编译项
make menuconfig
平台勾选Amlogic Platforms,使用Y键勾选,N键取消选择,默认应该是勾选的。

勾选上Amlogic Meson dwmac support 。

勾选上Amlogic gxl mdio驱动。

勾选上Amlogic Meson GXL Internal PHY。

退出保存,开始编译
make -j32
在arch/arm64/boot文件夹下会生成编译好的Linux内核文件Image,arch/arm64/boot/dts/amlogic下是生成的设备树文件。

复制一个设备树到boot文件夹,这里我们使用meson-gxl-s905x-p212.dtb这个设备树。
cp arch/arm64/boot/dts/amlogic/meson-gxl-s905x-p212.dtb arch/arm64/boot/
Uboot使用网络加载zImage和设备树
配置虚拟机开启TFTP
安装tftp服务器。
sudo apt install tftpd-hpa
配置tftp服务器路径为Linux编译出来的文件夹。
vim /etc/default/tftpd-hpa

重启tftp服务器。
sudo service tftpd-hpa restart
配置板子使用TFTP启动
给板子上电,进入Uboot shell界面,配置好tftp加载需要的环境变量。
# 设置板子IP
setenv ipaddr 192.168.1.20
# 设置TFTP服务器IP,也就是虚拟机IP
setenv serverip 192.168.1.56
# 使用tftp命令加载linux内核和设备树到内存的0x1000000和0x4000000地址处
setenv tftp_boot "tftp 0x1000000 Image;tftp 0x4000000 meson-gxl-s905x-p212.dtb;booti 0x1000000 - 0x4000000"
# 保存环境变量
saveenv
使用网线连接板子网口和虚拟机到同一个交换机上,让两者网络能够联通,运行tftp启动。
run tftp_boot
从串口可以看到,当网络传输完Image文件和meson-gxl-s905x-p212.dtb文件后,从Starting Kernel开始,Linux内核就正式启动了。

由于现在还没有安装根文件系统,在Linux尝试挂载文件系统时就会找不到根文件系统,最终出现Kernel panic卡住。

小结
通过上面的步骤,成功使用最新的主线Linux源代码编译出了能在机顶盒板子上启动的Linux内核文件和设备树,并可以通过上一节编译的主线Uboot使用TFTP加载的方式加载并启动Linux内核,但最终由于还没有挂载根文件系统,导致启动Linux时出现Kernel panic卡住。
下一步就是搞一个Ubuntu根文件系统并让Linux内核最终进入Ubuntu系统,最终将Bootloader、Linux内核、设备树和根文件系统一起打包成一个img文件,方便进行系统复制和烧写。

浙公网安备 33010602011771号