1. 项目概述与准备工作
作为一名长期从事嵌入式Linux开发的工程师,最近在基于久久派开发板进行系统移植时,遇到了文件系统定制的问题。经过实践验证,采用Buildroot构建轻量级文件系统是最佳选择。本文将详细记录从环境搭建到最终部署的全过程,特别针对龙芯架构(loongarch64)的交叉编译环境配置进行重点说明。
1.1 硬件与基础环境
久久派开发板采用龙芯2K1000处理器,双核1GHz主频,支持DDR3内存和多种外设接口。在开始前需要准备:
- 主机系统:Ubuntu 20.04 LTS(推荐)
- 开发工具链:loongson-gnu-toolchain-13.2
- 源码包:buildroot-2023.02.1.tar.gz
注意:龙芯工具链需要从官方渠道获取,安装时建议使用/opt目录存放,避免权限问题。我实际测试发现工具链路径若包含空格或中文会导致编译异常。
1.2 初始环境配置
解压源码包后,需要特别注意以下几点:
bash复制sudo tar -zvxf buildroot.tar.gz # 使用sudo避免权限问题
cd buildroot
cp ./config_systemd .config # 使用systemd作为init系统
这里选择systemd而非传统的init.d,主要考虑现代Linux发行版的兼容性。实测在久久派上,systemd的启动时间比sysvinit快约15%,且服务管理更便捷。
2. 交叉编译工具链配置
2.1 关键参数设置
执行make ARCH=loongarch64 menuconfig后,工具链配置需要特别关注:
- Toolchain path:必须绝对路径指向工具链安装位置
bash复制
/opt/loongson-gnu-toolchain-13.2 - Toolchain prefix:架构特定前缀
bash复制
$(ARCH)-unknown-linux-gnu - 版本匹配:
- External toolchain gcc version:13.x
- External toolchain kernel headers series:6.5.x
踩坑记录:曾因gcc版本选择错误导致glibc兼容性问题,建议通过
loongarch64-unknown-linux-gnu-gcc -v确认实际版本。
2.2 依赖库配置
在Toolchain选项中:
- Enable C++ support:Y(如需C++开发)
- Toolchain has RPC support:N(除非需要旧版NFS支持)
- Thread library debugging:N(发布版本建议关闭)
3. 系统基础定制
3.1 主机名与欢迎语
在System configuration菜单中:
- System hostname:设置为设备标识(如jiujiu-pai)
- System banner:可添加自定义登录提示信息
- Run agetty after boot:必须开启(否则无登录终端)
3.2 必要工具选择
根据实际需求添加软件包(按空格键选择):
bash复制Target packages →
├─ Networking applications
│ ├─ net-tools(必备基础网络工具)
│ └─ openssh(远程管理必须)
├─ Filesystem utilities
│ ├─ exfat-utils(U盘支持)
│ └─ f2fs-tools(Flash优化文件系统)
└─ System tools
├─ htop(进程监控)
└─ sudo(权限管理)
经验分享:openssh编译时若报错,可尝试先取消选择,编译基础系统后再单独添加。
4. 编译优化与镜像生成
4.1 国内镜像源配置
为加速下载,修改Build_options中的镜像源:
bash复制Backup download site: http://sources.buildroot.net
Kernel.org mirror: https://mirror.bjtu.edu.cn/kernel/
GNU Software mirror: http://mirrors.nju.edu.cn/gnu/
4.2 编译命令详解
正式编译需添加安全绕过参数:
bash复制sudo make FORCE_UNSAFE_CONFIGURE=1
该参数允许root用户执行某些危险操作,在嵌入式开发中常需使用。编译完成后产出文件:
- output/images/rootfs.cpio:内存文件系统格式
- output/images/rootfs.tar:标准tar归档(推荐烧写)
- output/images/rootfs.tar.gz:压缩版本
实测数据:在Ryzen 7 5800H主机上,完整编译约需25分钟(网络通畅情况下)。
5. 系统部署与调优
5.1 首次启动配置
通过串口登录后,建议按顺序执行:
-
网络配置(以end0网口为例):
bash复制sudo nano /etc/systemd/network/end0.network典型配置:
ini复制[Match] Name=end0 [Network] Address=192.168.1.100/24 Gateway=192.168.1.1 DNS=114.114.114.114 -
SSH服务启用:
bash复制sed -i 's/#PermitRootLogin/PermitRootLogin/' /etc/ssh/sshd_config systemctl restart sshd
5.2 环境变量优化
在/etc/profile.d/目录下创建custom.sh:
bash复制# 提示符优化
PS1='[\u@\h]:\w$: '
# 动态库路径
export LD_LIBRARY_PATH=/opt/opencv/lib:$LD_LIBRARY_PATH
export PATH=$PATH:/opt/bin
5.3 开机自启动管理
推荐两种方式:
-
/etc/rc.local(传统方法):
bash复制#!/bin/sh /path/to/your_script & exit 0 -
systemd服务(现代方法):
bash复制sudo nano /etc/systemd/system/your_service.service示例配置:
ini复制[Unit] Description=Custom Service [Service] ExecStart=/path/to/program Restart=always [Install] WantedBy=multi-user.target
6. 常见问题排查
6.1 动态库缺失
使用objdump检查依赖:
bash复制loongarch64-unknown-linux-gnu-objdump -x main | grep NEEDED
若发现缺失库,需:
- 将.so文件放入/usr/lib或自定义路径
- 更新LD_LIBRARY_PATH
6.2 网络连接异常
诊断步骤:
- 检查物理连接状态:
bash复制ip link show end0 - 测试基础连通性:
bash复制
ping -c 4 192.168.1.1 - 查看DNS解析:
bash复制
nslookup example.com
6.3 登录循环问题
可能原因:
- /etc/passwd权限错误
- PAM配置异常
- 磁盘空间满
解决方法:
bash复制mount -o remount,rw / # 确保根目录可写
df -h # 检查磁盘空间
chmod 644 /etc/passwd # 修复权限
7. 进阶配置技巧
7.1 无线网络配置
创建/etc/wpa_supplicant.conf:
bash复制ctrl_interface=/var/run/wpa_supplicant
ap_scan=1
network={
ssid="your_SSID"
psk="your_password"
key_mgmt=WPA-PSK
}
启动服务:
bash复制systemctl enable wpa_supplicant@wlan0
7.2 性能优化建议
- 内核参数调整:
bash复制echo "vm.swappiness=10" >> /etc/sysctl.conf - 文件系统选择:
- 频繁读写:f2fs
- 只读分区:squashfs
- 编译选项:
bash复制
启用:make menuconfig- BR2_OPTIMIZE_2(优化级别)
- BR2_SSP_REGULAR(栈保护)
在实际部署到久久派开发板时,建议先通过TF卡测试,确认系统稳定后再烧写到eMMC。我遇到过一个典型问题:首次启动时因文件系统权限错误导致服务启动失败,通过chmod -R 755 /etc/init.d解决。这个案例提醒我们,在定制文件系统时要特别注意权限继承问题。
