1. 久久派开发环境搭建全流程解析
作为一名长期从事国产芯片开发的工程师,我最近在龙芯K架构的久久派开发板上完成了一次完整的开发环境搭建和内核升级。这个过程中积累了不少实战经验,特别是遇到了一些官方文档没有提及的"坑点"。下面我就把整个操作流程和关键注意事项分享给大家。
久久派是基于龙芯K架构的嵌入式开发板,主要面向物联网和边缘计算场景。与常见的ARM架构开发板相比,龙芯平台在工具链和环境配置上有其特殊性。我们这次的环境搭建主要涉及以下几个核心组件:
- 龙芯专用交叉编译工具链
- U-Boot引导程序
- Linux内核源码树
- 根文件系统构建
重要提示:在进行任何操作前,请确保已经备份好开发板上的重要数据。内核升级过程存在一定风险,可能导致系统无法启动。
2. 开发环境准备与工具链配置
2.1 主机环境要求
我使用的是Ubuntu 20.04 LTS作为开发主机系统,这是目前最稳定的选择。其他Linux发行版也可以,但需要相应调整部分命令。主机需要至少满足以下配置:
- 4核CPU
- 8GB内存
- 100GB可用磁盘空间
- 稳定的网络连接
首先安装基础依赖包:
bash复制sudo apt update
sudo apt install -y build-essential git flex bison libssl-dev libncurses5-dev
2.2 龙芯交叉编译工具链安装
龙芯提供了专门的工具链,这是开发环境的核心组件。我使用的是官方最新的loongson-gcc8.3工具链:
bash复制wget http://ftp.loongnix.cn/toolchain/gcc/release/gcc8.3/gcc-8.3-linux-4.19-loongarch64-linux-gnu-rc1.3.tar.xz
tar -xvf gcc-8.3-linux-4.19-loongarch64-linux-gnu-rc1.3.tar.xz
sudo mv gcc-8.3-linux-4.19-loongarch64-linux-gnu /opt/loongson-toolchain
将工具链加入系统PATH:
bash复制echo 'export PATH=/opt/loongson-toolchain/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
验证安装是否成功:
bash复制loongarch64-linux-gnu-gcc --version
3. 内核源码获取与配置
3.1 下载内核源码
久久派官方提供了定制化的Linux内核源码,这是最稳定的选择:
bash复制git clone https://github.com/loongson/buildroot-jiujiupai.git
cd buildroot-jiujiupai/linux
3.2 内核配置
进入内核源码目录后,首先导入默认配置:
bash复制make ARCH=loongarch CROSS_COMPILE=loongarch64-linux-gnu- jiujiupai_defconfig
然后可以根据需要进行定制化配置:
bash复制make ARCH=loongarch CROSS_COMPILE=loongarch64-linux-gnu- menuconfig
在menuconfig界面中,有几个关键配置项需要特别注意:
- CPU类型选择:确保选中Loongson K架构
- 设备驱动:检查SPI、I2C等接口驱动是否启用
- 文件系统支持:确保EXT4、SQUASHFS等常用文件系统已编译
4. 内核编译与烧写
4.1 编译内核
使用以下命令开始编译:
bash复制make ARCH=loongarch CROSS_COMPILE=loongarch64-linux-gnu- -j$(nproc)
编译过程可能需要30分钟到1小时,取决于主机性能。编译完成后,会在arch/loongarch/boot目录下生成内核镜像文件。
4.2 准备烧写环境
将开发板通过USB转串口线连接到主机,并准备好TF卡作为烧写介质。首先对TF卡进行分区:
bash复制sudo fdisk /dev/sdX # 替换为你的TF卡设备
分区方案建议:
- 第一个分区:FAT32格式,100MB,用于存放内核镜像
- 第二个分区:EXT4格式,剩余空间,用于根文件系统
格式化分区:
bash复制sudo mkfs.vfat -n boot /dev/sdX1
sudo mkfs.ext4 -L rootfs /dev/sdX2
4.3 烧写内核
挂载TF卡分区并复制内核镜像:
bash复制sudo mount /dev/sdX1 /mnt/boot
sudo cp arch/loongarch/boot/vmlinuz /mnt/boot/
sudo umount /mnt/boot
5. 系统启动与验证
5.1 修改启动参数
将TF卡插入开发板,通过串口连接后上电。在U-Boot启动时快速按下任意键进入命令行,设置启动参数:
bash复制setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p2 rw
setenv bootcmd 'fatload mmc 0:1 0x80200000 vmlinuz; bootoctlinux 0x80200000'
saveenv
boot
5.2 验证内核版本
系统启动后,执行以下命令验证新内核是否正常运行:
bash复制uname -a
cat /proc/cpuinfo
dmesg | grep -i error
6. 常见问题与解决方案
6.1 编译错误处理
问题1:缺少头文件
code复制fatal error: openssl/opensslv.h: No such file or directory
解决方案:
bash复制sudo apt install libssl-dev
问题2:工具链不兼容
code复制unrecognized command line option '-march=loongarch'
解决方案:确认使用的工具链版本是否正确,必要时重新下载安装。
6.2 启动问题排查
问题:内核panic无法启动
检查串口输出信息,常见原因包括:
- 设备树配置错误
- 根文件系统路径不正确
- 内存参数设置不当
解决方法:重新检查U-Boot环境变量和内核配置,确保一致。
7. 性能优化建议
7.1 内核参数调优
在/etc/sysctl.conf中添加以下优化参数:
bash复制vm.swappiness = 10
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
7.2 文件系统优化
对于嵌入式系统,建议使用以下mount选项:
bash复制noatime,nodiratime,data=writeback,commit=60
这些选项可以减少磁盘I/O操作,提高系统响应速度。
8. 进阶开发建议
完成基础环境搭建后,可以进一步探索:
- 使用Buildroot构建定制化根文件系统
- 开发内核模块驱动特定硬件
- 移植常用应用程序和服务
我在实际项目中发现,久久派的GPIO性能相当不错,特别适合物联网网关类应用。通过合理的内核配置,中断响应时间可以控制在微秒级。
