第一次接触香橙派H3开发板时,我被它小巧的体积和全志H3芯片的强大性能所吸引。这块开发板不仅价格亲民,而且社区支持相当完善,特别适合嵌入式Linux的学习和开发。不过要想充分发挥它的潜力,首先得把开发环境搭建好。
我选择的是Ubuntu 18.04作为开发主机系统,这个版本在香橙派社区文档中被推荐使用,兼容性最好。安装完系统后,第一件事就是配置交叉编译工具链。这里我使用的是arm-none-linux-gnueabihf-gcc 9.2版本,这个版本对H3芯片的支持相当稳定。
配置环境时遇到几个常见坑点:
开发板连接方面,强烈建议准备一个USB转TTL模块,通过串口调试能省去很多麻烦。我用的是CH340芯片的转换器,在Ubuntu下无需额外驱动就能识别。连接时注意:
串口调试工具我推荐minicom,配置简单好用:
bash复制sudo apt install minicom
sudo minicom -s
在配置界面记得把硬件流控制设为No,波特率设为115200 8N1。
U-Boot作为嵌入式系统的引导程序,是整个启动流程的第一环。香橙派H3有官方维护的U-Boot源码,在GitHub的orangepi-xunlong仓库可以找到。我选择的是2020.04这个稳定版本。
编译前需要先配置好两个关键参数:
makefile复制CROSS_COMPILE = arm-none-linux-gnueabihf-
ARCH = arm
然后执行:
bash复制make orangepi_pc_defconfig
make -j$(nproc)
-j参数可以根据你的CPU核心数调整,能显著加快编译速度。
第一次编译时我遇到了几个依赖问题,这里把解决方案分享给大家:
编译成功后会在目录下生成u-boot-sunxi-with-spl.bin文件,这就是我们要烧录的镜像。烧录到SD卡的方法很特别:
bash复制sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdX bs=1024 seek=8
这里有几个关键点:
烧录完成后插入开发板,通过串口可以看到U-Boot启动日志。如果卡在starting USB...阶段时间过长,可以修改U-Boot源码中的do_usb函数直接返回0,这样能显著加快启动速度。
Linux内核的编译流程与U-Boot类似,但配置选项更加复杂。香橙派官方提供了适配好的内核源码,我们只需要做少量配置即可。
首先设置环境变量:
bash复制export ARCH=arm
export CROSS_COMPILE=arm-none-linux-gnueabihf-
然后使用官方默认配置:
bash复制make sunxi_defconfig
如果想自定义内核功能,可以使用:
bash复制make menuconfig
这里特别提醒,要确保以下选项开启:
编译命令:
bash复制make zImage -j$(nproc)
make dtbs
编译完成后会得到两个关键文件:
为了实现网络加载,我们需要配置TFTP服务。在Ubuntu上安装配置步骤如下:
bash复制sudo apt install tftp-hpa tftpd-hpa
sudo mkdir /tftpboot
sudo chmod 777 /tftpboot
编辑/etc/default/tftpd-hpa文件:
conf复制TFTP_DIRECTORY="/tftpboot"
TFTP_OPTIONS="-l -c -s"
然后把zImage和dtb文件复制到/tftpboot目录,重启服务:
bash复制sudo service tftpd-hpa restart
根文件系统是Linux运行的最后一个关键组件。我选择用BusyBox来构建最小化根文件系统,既轻量又功能完备。
BusyBox编译配置:
bash复制make defconfig
make menuconfig
重要配置项:
编译安装:
bash复制make -j$(nproc)
make install CONFIG_PREFIX=/path/to/rootfs
接下来需要创建基本的目录结构和配置文件:
bash复制mkdir -p rootfs/{dev,proc,sys,tmp,root,etc/init.d}
关键配置文件示例:
etc/fstab:
conf复制proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
etc/inittab:
conf复制::sysinit:/etc/init.d/rcS
console::askfirst:-/bin/sh
etc/init.d/rcS:
bash复制#!/bin/sh
mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
记得给rcS文件添加可执行权限。
NFS服务配置:
bash复制sudo apt install nfs-kernel-server
sudo mkdir /nfsroot
sudo chmod 777 /nfsroot
编辑/etc/exports文件:
conf复制/nfsroot *(rw,sync,no_subtree_check,no_root_squash)
由于U-Boot通常只支持NFSv2,还需要修改/etc/default/nfs-kernel-server:
conf复制RPCNFSDCOUNT="-V 2 8"
最后在U-Boot中设置启动参数:
bash复制setenv bootargs 'console=ttyS0,115200 root=/dev/nfs nfsroot=192.168.1.100:/nfsroot ip=192.168.1.200:192.168.1.100:192.168.1.1:255.255.255.0::eth0:off'
setenv bootcmd 'tftp 42000000 zImage; tftp 43000000 sun8i-h3-orangepi-pc.dtb; bootz 42000000 - 43000000'
saveenv
在实际调试过程中,有几个常见问题值得特别注意:
性能优化方面,有几个实用技巧:
bash复制make modules_install INSTALL_MOD_PATH=/path/to/rootfs
bash复制sudo apt install ccache
export CCACHE_DIR="/path/to/ccache"
export PATH="/usr/lib/ccache:$PATH"
系统启动后,可以通过以下命令检查运行状态:
bash复制cat /proc/meminfo # 查看内存使用
df -h # 查看挂载情况
ifconfig # 查看网络配置
在实际操作过程中,我遇到过不少问题,这里把典型问题的解决方案分享给大家:
开发过程中,建议保持以下习惯:
当基础系统跑通后,可以考虑以下几个进阶方向:
在开发过程中,建议多参考全志H3的官方文档和香橙派的社区资源。遇到问题时,可以在Linux社区论坛或香橙派用户群中寻求帮助。嵌入式开发是个需要耐心的过程,有时候一个小问题可能需要花费数小时调试,但解决问题的成就感也是无可替代的。