当前位置: 首页 > news >正文

保姆级教程:在Ubuntu 22.04上为新唐NUC980编译5.10.y内核与根文件系统(含SD卡分区避坑指南)

从零构建NUC980嵌入式系统:Ubuntu 22.04环境下的内核编译与SD卡部署实战

当一块崭新的NUC980开发板摆在面前,许多嵌入式开发者面临的第一个挑战往往是如何搭建完整的开发环境。本文将手把手带你完成从Ubuntu系统配置到最终系统烧录的全流程,特别针对5.10.y内核版本和SD卡部署中的常见陷阱提供解决方案。

1. 开发环境准备与基础配置

在VirtualBox中安装Ubuntu 22.04时,建议分配至少40GB磁盘空间和4GB内存。安装完成后,首先需要更新软件源并安装基础开发工具:

sudo apt update && sudo apt upgrade -y sudo apt install -y build-essential git make gcc

关键依赖库安装(避免后续编译错误):

sudo apt install -y libusb-1.0-0-dev zlib1g-dev pkg-config \ python3-dev swig libncurses5-dev libssl-dev \ u-boot-tools flex bison

对于国内用户,建议更换apt源以提高下载速度:

sudo sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list

2. 构建交叉编译工具链

我们将使用Buildroot 2023.02来生成工具链和根文件系统。这是目前最稳定兼容NUC980的版本组合。

mkdir ~/nuc980-sdk && cd ~/nuc980-sdk wget https://buildroot.org/downloads/buildroot-2023.02.tar.xz tar -xJf buildroot-2023.02.tar.xz

配置Buildroot时需要注意以下关键选项:

配置项推荐值说明
Target ArchitectureARM (little endian)必须匹配NUC980架构
Target Binary FormatELF标准格式
Target Architecture Variantcortex-a9NUC980处理器核心
Toolchain typeBuildroot toolchain自包含工具链

配置完成后执行编译:

cd buildroot-2023.02 make menuconfig make -j$(nproc)

提示:编译过程可能持续30-60分钟,期间可以准备其他工作。完成后工具链路径为output/host/bin/

3. SD卡分区方案设计与实施

NUC980的SD卡布局有特殊要求,不当的分区会导致系统无法启动。推荐使用以下分区方案:

  1. 未分配空间:起始1MB(留给u-boot)
  2. boot分区:32MB FAT32(存放内核和设备树)
  3. rootfs分区:剩余全部空间EXT4

使用fdisk进行分区的具体命令序列:

sudo fdisk /dev/sdX # 在fdisk交互界面依次输入: # o (创建新DOS分区表) # n (新建分区1,起始扇区2048,大小+32M) # t (设置类型为c,即FAT32) # n (新建分区2,使用默认起始扇区,大小可留空表示剩余全部空间) # w (写入并退出)

格式化分区时需特别注意:

sudo mkfs.vfat -F 32 -n boot /dev/sdX1 sudo mkfs.ext4 -L rootfs /dev/sdX2

4. U-Boot编译与烧录技巧

获取官方U-Boot源码并切换到适配分支:

git clone --depth=1 -b nuc980 https://github.com/OpenNuvoton/NUC970_U-Boot_v2016.11.git cd NUC970_U-Boot_v2016.11

关键配置修改点:

  • include/configs/nuc980_evb.h中启用SD卡支持:
    #define CONFIG_ENV_IS_IN_MMC #define CONFIG_SYS_MMC_ENV_DEV 0
  • 确保设备树支持已启用(5.10.y内核必需)

编译命令:

export PATH=$PATH:~/nuc980-sdk/buildroot-2023.02/output/host/bin make nuc980_defconfig make -j$(nproc)

烧录u-boot时需要特别注意开发板启动模式设置:

  1. 将PG[1:0]跳线设为00(SPI启动模式)
  2. 使用NuWriter工具烧录生成的u-boot.bin
  3. 烧录完成后改回01(SD卡启动模式)

5. Linux内核定制化编译

获取官方内核源码:

git clone --depth=1 -b nuc980-5.10.y https://github.com/OpenNuvoton/NUC980-linux-5.10.y.git cd NUC980-linux-5.10.y

关键配置步骤:

  1. 应用默认配置:make nuc980_defconfig
  2. 在menuconfig中确保以下选项启用:
    • Device Drivers -> MMC/SD/SDIO support
    • File systems -> EXT4 filesystem support
    • Kernel Features -> Use the ARM EABI to compile the kernel

设备树修改重点:

sdh@b0018000 { status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_sdh0>; };

编译命令:

make ARCH=arm CROSS_COMPILE=arm-buildroot-linux-gnueabi- uImage dtbs -j$(nproc)

6. 系统部署与调试技巧

将编译产物拷贝到SD卡:

sudo cp arch/arm/boot/uImage /media/$USER/boot/ sudo cp arch/arm/boot/dts/nuc980-*.dtb /media/$USER/boot/ sudo tar -xf ~/nuc980-sdk/buildroot-2023.02/output/images/rootfs.tar -C /media/$USER/rootfs/

常见启动问题排查:

  • U-Boot不加载:检查PG跳线设置和烧录模式
  • 内核panic:确认设备树文件与硬件版本匹配
  • 根文件系统挂载失败:检查内核EXT4驱动是否启用
  • 串口无输出:确认开发板串口跳线设置

在项目实践中,我发现最常出错的环节是SD卡分区顺序和文件系统类型设置。有一次因为误将boot分区格式化为EXT4,导致系统无法启动,花费数小时才定位到这个简单问题。建议在每次分区操作后使用lsblk -f命令确认分区类型是否正确。

http://www.gsyq.cn/news/1427167.html

相关文章:

  • 2026盐城卫生间阳台漏水维修市场价 靠谱防水品牌排名(本地适配版) - 国麟测评
  • Python之rkstiff包语法、参数和实际应用案例
  • 四川舞蹈表演专业院校推荐,2026艺考择校看这篇就够 - 品牌2025
  • iOS 15+免越狱深度定制完全指南:CowabungaLite让你的iPhone与众不同
  • Meta开源LLaMA与AI社交融合战略:应对ChatGPT挑战的生态博弈
  • ULINK2调试器VCC跳线设置与JTAG供电原理详解
  • 保姆级教程:在Firefly RK3566开发板上用GStreamer同时预览两个MIPI摄像头画面
  • Python之rktools包语法、参数和实际应用案例
  • LizzieYzy:免费开源围棋AI分析工具,打造你的专业围棋教练
  • DAO实战指南:区块链与AI如何重塑组织协作与治理
  • AI如何颠覆网络安全:从规则响应到智能预测的范式转移
  • ToDesk Linux客户端安装后,临时密码总变?手把手教你解读config.ini配置文件
  • SWAT建模效率翻倍:HWSD土壤数据处理全流程自动化脚本思路分享(Python+ArcPy)
  • 数据泄露、越狱攻击、幻觉放大…Claude三大致命风险全解析,今天不看明天踩坑
  • 7th grade math (2026.05.30)
  • Python之rl4grid包语法、参数和实际应用案例
  • 2023年加密货币入门:10美元实战指南与安全投资框架
  • ARMv8.1-A架构LORegion机制详解与优化实践
  • SpringBoot项目实战:用EasyPoi + Docx4j搞定Word模板转PDF(含图片和字体乱码解决方案)
  • Devin AI时代:软件工程师如何从编码者转型为AI驾驭者与架构师
  • 不是做事的人,是生产做事方法的人
  • 3步实现PUBG职业级压枪:罗技鼠标宏终极配置指南
  • XPD920 USB Type-C PD/PPS 多协议控制器
  • 不想写代码?试试用Smardaten社区版半小时搭个数据大屏(附模板下载)
  • 中小型美甲美睫门店必备!简艺会员管理软件解决门店经营管理全痛点 - GrowthUME
  • 杭州市拱墅区悦夏废品:杭州厂房拆除推荐哪家 - LYL仔仔
  • 保姆级教程:在Windows 10上零基础部署VCSA 8.0,并成功纳管你的第一台ESXi主机
  • 别再纠结了!嵌入式新手选IIC还是SPI?从Arduino和树莓派实战聊聊区别
  • 系统架构:高可用与容错设计
  • 实战避坑指南:用MATLAB/Simulink仿真多无人机编队控制(附一致性算法源码)