机顶盒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

image-20241114224620772

因为主线Linux没有专门给s905搞一个配置文件,因此只有使用通用默认配置文件defconfig作为初始配置,然后需要再手动根据板子和芯片调整一些编译项。

# 配置架构和编译器
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
# 使用defconfig作为初始配置
make defconfig
# 手动配置编译项
make menuconfig

平台勾选Amlogic Platforms,使用Y键勾选,N键取消选择,默认应该是勾选的。

image-20241114225322838

勾选上Amlogic Meson dwmac support 。

image-20241114230248377

勾选上Amlogic gxl mdio驱动。

image-20241114230623549

勾选上Amlogic Meson GXL Internal PHY。

image-20241114230845010

退出保存,开始编译

make -j32

在arch/arm64/boot文件夹下会生成编译好的Linux内核文件Image,arch/arm64/boot/dts/amlogic下是生成的设备树文件。

image-20241114231920450

复制一个设备树到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

image-20241114233224218

重启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内核就正式启动了。

image-20241114234725148

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

image-20241114235356757

小结

通过上面的步骤,成功使用最新的主线Linux源代码编译出了能在机顶盒板子上启动的Linux内核文件和设备树,并可以通过上一节编译的主线Uboot使用TFTP加载的方式加载并启动Linux内核,但最终由于还没有挂载根文件系统,导致启动Linux时出现Kernel panic卡住。

下一步就是搞一个Ubuntu根文件系统并让Linux内核最终进入Ubuntu系统,最终将Bootloader、Linux内核、设备树和根文件系统一起打包成一个img文件,方便进行系统复制和烧写。

posted @ 2024-11-15 00:11  LM358  阅读(747)  评论(0)    收藏  举报