1. 久久派开发板与龙芯K架构概述
龙芯K系列处理器作为国产自主CPU的代表之一,在嵌入式领域有着广泛的应用场景。久久派开发板搭载的正是龙芯K架构处理器,这是一款专为教育、物联网和工业控制设计的开发平台。与常见的ARM架构开发板相比,龙芯K采用MIPS指令集架构,在软件生态和工具链支持上有着独特的特点。
我初次接触久久派开发板时,最直观的感受是其扎实的做工和丰富的接口配置。板载512MB DDR3内存、8GB eMMC存储,以及USB、以太网、HDMI等常用接口一应俱全。但真正开始搭建开发环境时,才发现龙芯平台的"个性"所在——许多在ARM平台上习以为常的工具和库,在这里需要重新编译适配。
提示:龙芯K架构采用Little-Endian字节序,与大多数MIPS设备的Big-Endian不同,这在交叉编译时需要特别注意。
开发环境搭建的核心挑战主要来自三个方面:首先是工具链的选择,官方提供的loongson-gcc工具链需要正确配置;其次是内核源码的获取,龙芯维护了自己的Linux内核分支;最后是系统镜像的构建,需要理解龙芯特有的打包方式。这三个环节环环相扣,任何一个步骤出现问题都会导致后续工作无法开展。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础开发环境搭建实战
2.1 工具链安装与配置
官方推荐的开发环境是Loongson GNU Compiler Collection,基于较新的GCC 8.3版本优化。在Ubuntu 20.04系统上安装时,需要先添加官方源:
bash复制sudo add-apt-repository ppa:loongson-ppa/toolchain
sudo apt-get update
sudo apt-get install loongson-gcc8.3
安装完成后,关键是要正确设置环境变量。我建议在~/.bashrc中添加以下配置:
bash复制export PATH=/opt/loongson/gcc8.3/bin:$PATH
export CROSS_COMPILE=mipsel-linux-gnu-
export ARCH=mips
这里容易踩的坑是CROSS_COMPILE的前缀设置。与ARM平台的"arm-linux-gnueabi-"不同,龙芯K使用的是"mipsel-linux-gnu-"前缀。我曾经因为漏掉了最后的连字符,导致后续内核编译时出现莫名其妙的工具链错误。
2.2 内核源码获取与准备
龙芯维护的内核源码托管在GitLab上,推荐使用以下命令克隆:
bash复制git clone https://gitlab.loongnix.cn/loongson/linux-loongarch.git
cd linux-loongarch
git checkout loongnix-release
值得注意的是,官方源码库有多个分支,针对久久派开发板应该选择loongnix-release分支而非主分支。我最初误用了master分支,结果编译出的内核无法正常驱动板载网卡。
源码准备阶段还需要获取正确的配置文件。久久派开发板的默认配置位于:
bash复制cp arch/mips/configs/jiujiupai_defconfig .config
这个步骤看似简单,但隐藏着一个关键细节:jiujiupai_defconfig默认没有启用模块签名验证。如果后续需要加载第三方内核模块,建议执行:
bash复制./scripts/config --enable MODULE_SIG
./scripts/config --enable MODULE_SIG_ALL
3. 内核编译与优化技巧
3.1 基础编译流程
配置好环境后,标准编译命令如下:
bash复制make oldconfig
make -j$(nproc) vmlinux modules
这里有几个经验点值得分享:
- 使用
-j$(nproc)可以充分利用多核CPU加速编译,但在首次编译时建议先单线程执行,便于观察可能的错误 - 龙芯K架构对某些GCC优化选项敏感,如果遇到奇怪的内核崩溃,可以尝试在Makefile中移除
-O2优化 - 编译完成后,
vmlinux位于根目录,而压缩后的vmlinuz在arch/mips/boot目录下
3.2 内核裁剪与定制
久久派开发板资源有限,合理裁剪内核可以显著提升性能。我推荐以下配置调整:
| 配置项 | 推荐值 | 说明 |
|---|---|---|
| CONFIG_DEBUG_INFO | n | 禁用调试符号,减少体积 |
| CONFIG_PRINTK | y | 保留基本日志输出 |
| CONFIG_NET | y | 必须启用网络支持 |
| CONFIG_USB | m | 按需模块化USB驱动 |
| CONFIG_SOUND | n | 非必要可禁用音频 |
通过make menuconfig进入配置界面后,可以按"/"键搜索这些选项。特别提醒:修改配置后一定要执行make savedefconfig保存变更,否则下次编译时会恢复默认设置。
4. 系统部署与内核升级
4.1 制作可启动镜像
编译生成的内核需要打包成龙芯特有的Pmon引导格式。官方提供了打包工具:
bash复制sudo apt install loongson-pmon-tools
mkpmon -k arch/mips/boot/vmlinuz -i initrd.img -o jiujiupai.pmon
这里常见的错误是忘记包含initrd镜像。我建议使用官方提供的initrd作为基础,然后根据需要添加自定义模块:
bash复制gunzip -c /usr/share/loongson/initrd.img > initrd
mkdir initrd-root && cd initrd-root
cpio -idv < ../initrd
# 添加自定义文件后重新打包
find . | cpio -o -H newc | gzip > ../initrd.img
4.2 固件烧写与验证
久久派支持通过USB或TF卡烧写系统。推荐使用dd命令写入TF卡:
bash复制sudo dd if=jiujiupai.pmon of=/dev/sdX bs=4M status=progress
sync
烧写完成后,插入开发板并连接串口终端(推荐使用115200波特率)。在Pmon引导界面按"c"进入命令行,执行:
pmon复制load (usb0,0)/jiujiupai.pmon
g
如果一切顺利,新内核应该正常启动。验证内核版本:
bash复制uname -a
5. 常见问题排查指南
5.1 内核启动卡住
现象:内核启动过程中停在某个特定驱动初始化阶段。
排查步骤:
- 在Pmon引导时添加
console=ttyS0,115200 earlycon=uart,mmio,0x1fe001e0参数 - 检查dmesg输出中最后的错误信息
- 常见原因包括:
- 内存配置不正确(检查CONFIG_MEMORY_SIZE)
- 设备树未正确包含(确认dtb文件是否打包进镜像)
- 关键驱动编译为模块但未包含在initrd中
5.2 网络功能异常
现象:以太网无法连接或性能低下。
解决方案:
- 确认内核配置启用了CONFIG_STMMAC_ETH
- 检查PHY驱动是否匹配:
bash复制
ethtool -i eth0 - 必要时手动指定PHY类型:
bash复制
insmod stmmac.ko phy_addr=0x01 phy_mask=0x01
5.3 性能优化建议
通过实测发现,默认内核配置下久久派的性能发挥不足70%。我总结了几点优化经验:
- 启用CPU频率调节:
bash复制echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor - 调整内存参数:
bash复制echo 1024 > /proc/sys/vm/min_free_kbytes - 禁用不必要的日志:
bash复制
dmesg -n 1
这些优化后,在Coremark测试中可以看到约30%的性能提升。对于需要长时间运行的物联网应用,还建议启用CONFIG_PREEMPT_VOLUNTARY抢占配置,提高系统响应速度。
在实际项目中,我还遇到过USB设备识别不稳定的情况。后来发现是内核电源管理过于激进导致的,通过在内核参数中添加usbcore.autosuspend=-1解决了问题。这类经验往往需要多次尝试才能积累,希望这些分享能帮助开发者少走弯路。
