1. 项目概述:为什么选择Ubuntu13.04搭建OK6410-A开发环境
十年前的老系统Ubuntu13.04在今天看来可能有些过时,但对于嵌入式开发特别是OK6410-A这类经典ARM11开发板而言,恰恰是最稳定的选择。我经手过二十多块OK6410-A开发板的环境搭建,实测发现Ubuntu13.04的glibc 2.17和gcc 4.7.3工具链与这块开发板的兼容性最佳,不会出现新版系统常见的工具链版本冲突问题。
OK6410-A作为三星S3C6410处理器的代表开发板,在工业控制、智能家居等领域仍有大量存量设备。它的开发环境需要以下核心组件:
- 交叉编译工具链arm-linux-gcc 4.3.2
- tftp服务用于内核镜像传输
- nfs服务用于根文件系统挂载
- 串口调试工具minicom
注意:虽然Ubuntu13.04官方已停止维护,但作为开发环境可以冻结apt源到old-releases.ubuntu.com,实测这个源至今仍能正常使用。
2. 开发环境搭建全流程实录
2.1 系统安装与基础配置
首先需要准备32位Ubuntu13.04镜像(64位系统会有库兼容问题)。安装时注意:
- 分区建议:/boot 200MB、swap 2GB、/ 至少20GB
- 安装时取消所有更新选项
- 安装完成后立即执行以下命令锁定源:
sudo sed -i 's/archive.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list sudo apt-get update基础软件包安装清单:
sudo apt-get install vim git make gcc g++ libncurses5-dev \ tftpd-hpa nfs-kernel-server minicom lzop2.2 交叉编译工具链部署
OK6410-A官方推荐使用arm-linux-gcc 4.3.2版本,这个版本对新版glibc存在兼容问题,但在Ubuntu13.04上运行完美:
- 解压工具链到/opt目录
sudo tar xjf arm-linux-gcc-4.3.2.tar.bz2 -C /opt- 配置环境变量
echo 'export PATH=$PATH:/opt/4.3.2/bin' >> ~/.bashrc source ~/.bashrc验证安装:
arm-linux-gcc -v应显示"gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72)"
踩坑记录:不要在工具链路径中包含空格或中文,否则会导致编译时出现诡异的"file not recognized"错误。
2.3 网络服务配置
TFTP服务配置
修改/etc/default/tftpd-hpa:
TFTP_USERNAME="tftp" TFTP_DIRECTORY="/tftpboot" TFTP_ADDRESS="0.0.0.0:69" TFTP_OPTIONS="-l -c -s"创建目录并设置权限:
sudo mkdir /tftpboot sudo chmod 777 /tftpboot sudo service tftpd-hpa restartNFS服务配置
编辑/etc/exports:
/nfsroot *(rw,sync,no_root_squash,no_subtree_check)创建挂载点:
sudo mkdir /nfsroot sudo chmod 777 /nfsroot sudo exportfs -a sudo service nfs-kernel-server restart3. 开发板连接与调试实战
3.1 串口终端配置
使用minicom连接开发板:
sudo minicom -s配置参数:
- Serial Device: /dev/ttyUSB0
- Bps/Par/Bits: 115200 8N1
- Hardware Flow Control: No
实用技巧:在~/.bashrc中添加alias mc='minicom -c on'可以启动带颜色显示的minicom
3.2 开发板启动流程
正常启动日志应包含以下关键信息:
U-Boot 2010.06 (Mar 12 2013 - 16:25:33) DRAM: 256 MB Flash: 2 MB NAND: 256 MiB通过tftp加载内核:
tftp 0x50008000 zImage bootm 0x500080003.3 常见启动问题排查
问题1:tftp传输超时
- 检查开发板与主机是否在同一网段
- 确认主机防火墙已关闭
- 在开发板执行ping测试网络连通性
问题2:内核panic无法挂载根文件系统
- 检查nfs导出路径是否正确
- 确认内核配置开启了NFS根文件系统支持
- 尝试在uboot设置正确的nfsroot参数:
setenv bootargs root=/dev/nfs nfsroot=192.168.1.100:/nfsroot ip=192.168.1.10:192.168.1.100:192.168.1.1:255.255.255.0::eth0:off4. 开发环境验证与优化
4.1 编译测试程序
创建helloworld.c:
#include <stdio.h> int main() { printf("OK6410-A Cross Compile Test\n"); return 0; }编译命令:
arm-linux-gcc helloworld.c -o helloworld file helloworld应显示"ELF 32-bit LSB executable, ARM, version 1 (SYSV)"
4.2 系统性能调优
- 关闭图形界面提升性能:
sudo systemctl set-default multi-user.target- 增加swap空间(针对大项目编译):
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 sudo mkswap /swapfile sudo swapon /swapfile- 修改make并发编译数(根据CPU核心数):
alias make='make -j4'4.3 开发环境备份方案
建议使用rsync定期备份关键目录:
rsync -avz --delete /opt /nfsroot /tftpboot backup@server:/ok6410_backup也可以打包成镜像方便迁移:
sudo tar cvpzf ok6410_env.tar.gz --exclude=/proc --exclude=/mnt --exclude=/sys /我在实际使用中发现,这套环境虽然"老旧",但编译出的内核镜像稳定性比在新系统上编译的高出不少。特别是处理GPIO中断时,老工具链生成的驱动几乎没有出现过误触发的情况。对于还在维护OK6410-A设备的工程师,建议保持这个环境不要轻易升级。