从零开始为香橙派orangepi zero 3移植主线linux——2.linux kernel
- 0.环境搭建补档
- NFS服务
- TFTP服务
- 一、linux kernel编译
- 二、运行
0.环境搭建补档
linux kernel验证时,使用tftp服务从ubuntu主机下载启动更加方便,等到验证无误后再一次性烧写到tf卡。所以在此记录一下有关的环境安装,方便后续查找。
NFS服务
ubuntu下安装:
sudo apt-get install nfs-kernel-server rpcbind
打开配置文件,并添加自己的NFS路径:
sudo vim /etc/exports
追加内容:
<path_to _directory> *(rw,sync,no_root_squash)
重启NFS服务:
sudo /etc/init.d/nfs-kernel-server restart
TFTP服务
ubuntu下使用以下命令安装相关工具:
sudo apt-get install tftp-hpa tftpd-hpa
sudo apt-get install xinetd
创建tftpboot所使用的目录,并赋予权限:
mkdir <path_to _directory>
chmod 777 <directory>
ubuntu下新建文件/etc/xinetd.d/tftp
,并写入如下内容:
server tftp
{socket_type = dgramprotocol = udpwait = yesuser = rootserver = /usr/sbin/in.tftpdserver_args = -s <path_to _directory>disable = noper_source = 11cps = 100 2flags = IPv4
}
打开/etc/default/tftpd-hpa
文件,将其修改为如下所示内容:
# /etc/default/tftpd-hpaTFTP_USERNAME="tftp"
TFTP_DIRECTORY="<path_to _directory>"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="-l -c -s"
最后重启tftp服务:
sudo service tftpd-hpa restart
一、linux kernel编译
在linux源码目录下,使用以下命令编译:
export PATH=$PATH:<path_to_toolchain>/aarch64-none-linux-gnu/bin
make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- defconfig
make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- menuconfig
make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- -j20
由于arm64平台比较新,所以各大厂商的支持也比较差,只有一个默认的defconfig配置,笔者暂时只能基于这个配置文件进行适配。在menuconfig的platform selection菜单中,去掉其他厂商的SoC支持,只保留全志平台和ARMv8 software model两个选项。
其他的设备驱动只能后续再进行适配和精简,将此配置文件暂时保存备份。编译生成的文件为arch/arm64/boot/Image
和arch/arm64/boot/dts/allwinner/sun50i-h618-orangepi-zero3.dtb
二、运行
暂时使用tftp方式下载内核镜像并启动,将上述文件放入ubuntu的tftp目录,并赋予相关权限。开发板进入到uboot后手动配置相关网络参数,并设置如下启动参数:
setenv ipaddr 192.168.1.105 //开发板 IP 地址
setenv gatewayip 192.168.1.1 //开发板默认网关
setenv netmask 255.255.255.0 //开发板子网掩码
setenv serverip 192.168.1.103 //服务器地址,也就是 Ubuntu 地址
setenv bootargs 'console=ttyS0,115200'setenv boottftp 'tftp 40080000 Image; tftp 4fa00000 sun50i-h618-orangepi-zero3.dtb; booti 0x40080000 - 0x4fa00000'
saveenv
可以看到已经能够正常加载内核镜像,但有一些驱动还没有正确加载,并且由于没有根文件系统,最终是不能正常启动的。