1. 久久派开发环境搭建全流程解析
作为龙芯生态中重要的开发板之一,久久派凭借其出色的性价比和完整的工具链支持,在国产化嵌入式开发领域占据重要地位。我在实际项目中使用该平台进行过多次内核定制开发,这里将完整呈现从基础环境搭建到内核升级的实战过程。
开发环境搭建的第一步是准备基础系统。推荐使用官方提供的Loongnix系统镜像(基于Fedora定制),最新版本已预装龙芯架构的LLVM/Clang工具链。下载后通过以下命令写入SD卡:
bash复制dd if=loongnix-20.3.img of=/dev/sdX bs=4M status=progress
注意:SD卡容量建议不小于16GB,写入前务必确认设备路径,错误操作可能导致数据丢失
系统首次启动时需要完成以下关键配置:
- 扩展文件系统分区:
sudo lvextend -l +100%FREE /dev/mapper/loongnix-root - 更新软件源:
sudo dnf update --refresh - 安装开发基础包:
sudo dnf groupinstall "Development Tools"
2. 内核源码获取与编译环境配置
久久派当前默认搭载的是4.19版本内核,而官方仓库已提供5.10 LTS版本支持。获取源码有两种推荐方式:
方式一:从官方Git仓库克隆
bash复制git clone https://git.loongnix.cn/loongson/linux-loongarch.git -b loongarch-next
方式二:下载发布版快照
bash复制wget https://mirror.loongnix.cn/kernel/linux-5.10.113.tar.gz
编译前需要特别注意工具链的兼容性问题。龙芯架构的交叉编译配置如下:
makefile复制ARCH=loongarch
CROSS_COMPILE=loongarch64-linux-gnu-
实测中发现需要额外安装的依赖包:
- flex/bison:用于语法分析器生成
- openssl-devel:模块签名验证
- elfutils-libelf-devel:ELF文件处理
3. 内核配置与编译实战技巧
进入源码目录后,建议采用渐进式配置策略:
bash复制make ls3a5000_defconfig # 使用默认配置
make menuconfig # 交互式调整
关键配置项需要特别关注:
- CPU类型选择:确保选中"Loongson-3A5000/3B5000"
- 文件系统支持:EXT4/XFS/Btrfs必须编译进内核(非模块)
- 网络驱动:RTL8169/8111系列需要单独启用
- 调试选项:建议关闭KGDB以减少性能开销
编译优化参数推荐(针对LA464核心):
makefile复制CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_MCOUNT=y
CONFIG_DEBUG_INFO_REDUCED=n
完整编译命令序列:
bash复制make -j$(nproc) all
make modules_install
make install
经验:编译过程可能遇到头文件缺失错误,通过
dnf provides */缺失头文件名查找对应开发包
4. 内核安装与启动问题排查
编译产物主要包含三个关键文件:
- /boot/vmlinuz-5.10.113:压缩内核镜像
- /boot/System.map-5.10.113:符号映射表
- /boot/config-5.10.113:配置备份
安装后需要手动更新grub配置:
bash复制grub2-mkconfig -o /boot/grub2/grub.cfg
常见启动故障排查表:
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 卡在Starting kernel | 设备树不匹配 | 检查dtb文件是否更新 |
| 网卡无法识别 | 驱动未加载 | 确认CONFIG_R8169配置 |
| 根文件系统挂载失败 | initramfs缺失 | 执行mkinitrd重建 |
实测中发现一个典型问题:5.10内核默认启用了CONFIG_MODULE_SIG导致第三方模块加载失败。临时解决方案是在启动参数添加:
code复制module.sig_enforce=0
5. 开发环境深度优化指南
系统级调优建议:
- 关闭不必要的服务:
bash复制systemctl disable avahi-daemon systemctl mask ModemManager - 调整swappiness值:
bash复制echo 'vm.swappiness=10' >> /etc/sysctl.conf - 优化IO调度器:
bash复制echo 'deadline' > /sys/block/sda/queue/scheduler
开发工具链配置要点:
- VSCode远程开发配置:
json复制"remote.Architecture": "loongarch64", "remote.C_Cpp.default.includePath": [ "/usr/include/loongarch64-linux-gnu" ] - GDB增强调试:
bash复制set disassembly-flavor intel set print pretty on
Python环境特别注意事项:
bash复制dnf install python3-devel
python3 -m pip install --upgrade pip setuptools
遇到pip安装失败时,可尝试:
bash复制python3 -m pip install --prefix=/usr/local package_name
6. 硬件相关开发技巧
GPIO操作示例(需要先加载gpio-sch驱动):
c复制#define GPIO_BASE 0x1fe10500
void gpio_set(int pin) {
volatile uint32_t *reg = (uint32_t*)(GPIO_BASE + 0x04);
*reg |= (1 << pin);
}
I2C设备调试步骤:
- 检测设备地址:
i2cdetect -y 0 - 读取寄存器:
i2cget -y 0 0x50 0x00 - 性能分析:
i2cset -y 0 0x50 0x00 0x55
SPI接口配置要点:
- 确认设备树已启用SPI节点
- 加载spidev驱动:
modprobe spidev - 测试传输:
spi_test -D /dev/spidev0.0
7. 性能监控与优化实战
使用perf进行性能分析:
bash复制perf stat -e cycles,instructions,cache-references dd if=/dev/zero of=/dev/null count=1000000
内存带宽测试:
bash复制stream -M 2000000 -N 100
特定场景下的优化案例:
- 网络吞吐量提升:调整mtu值为9000
bash复制
ifconfig eth0 mtu 9000 - 减少上下文切换:设置CPU亲和性
bash复制taskset -c 0,1 command - 磁盘IO优化:启用writeback模式
bash复制echo 'writeback' > /sys/block/sda/queue/write_cache
我在实际项目中发现,当同时运行多个计算密集型任务时,通过cgroup进行资源隔离效果显著:
bash复制cgcreate -g cpu:/compute_group
echo 100000 > /sys/fs/cgroup/cpu/compute_group/cpu.cfs_quota_us
