当前位置: 首页 > 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.jsqmd.com/news/915854/

相关文章:

  • 如何在2024年完美运行经典Flash内容?终极Flash浏览器解决方案
  • 从BOLA到dash.js:手把手解析一个经典ABR算法是如何落地到开源播放器的
  • HR考中级经济师人力资源管理怎么备考? - 众智商学院职业教育
  • 2026年长春GEO优化服务全景评测:不同场景下的优选指南 - 资讯快报
  • Python之rkstiff包语法、参数和实际应用案例
  • 3步实现跨设备游戏串流:Sunshine开源游戏流媒体服务器完整指南
  • 如何3步永久备份微信聊天记录:WeChatExporter完整指南
  • ADI DSP老玩家血泪史:ADZS-ICE-1000仿真器,这5个操作习惯能让你多用好几年
  • 低预算可选!四川本地学费便宜的艺术类院校推荐 - 品牌2025
  • 2026西安卫生间瓷砖漏水处理公司TOP4:靠谱修缮企业甄选 专业防水公司排名推荐(2026年5月防水补漏最新TOP权威排名) - 冠盾建筑修缮
  • 从零部署YOLO模型到树莓派:数据标注、训练与NCNN优化全流程
  • 四川舞蹈表演专业院校推荐,2026艺考择校看这篇就够 - 品牌2025
  • 终极分屏游戏解决方案:Nucleus Co-Op让单机变多人派对
  • 从Windows/Mac切换到openEuler:命令行操作习惯迁移指南(避坑总结)
  • ncmdump:轻松解密网易云音乐NCM文件,释放你的音乐自由
  • 从一行BAT命令到理解企业授权:聊聊KMS激活背后的那些事儿(附Win10/11自查方法)
  • 手把手教你用Vivado 2019.1和ISERDES2原语,在Artix-7上搞定CameraLink Full模式相机采集(附源码)
  • iOS 15+免越狱深度定制完全指南:CowabungaLite让你的iPhone与众不同
  • Meta开源LLaMA与AI社交融合战略:应对ChatGPT挑战的生态博弈
  • 一键备份QQ空间:永久保存你的数字记忆宝库
  • AUTOSAR Adaptive平台下SOME/IP-SD配置避坑指南:从Service Discovery到状态机调优
  • 【Claude商业分析报告深度解密】:2024年Q2企业级AI决策模型实战数据与5大避坑指南
  • 如何打造你的个人数字档案馆:微信聊天记录永久归档完整方案
  • ULINK2调试器VCC跳线设置与JTAG供电原理详解
  • 保姆级教程:在Firefly RK3566开发板上用GStreamer同时预览两个MIPI摄像头画面
  • Python之rktools包语法、参数和实际应用案例
  • 从GPU到AI与元宇宙:NVIDIA如何用并行计算重塑数字世界
  • FPGA资源告急?试试这种“折叠”架构:用1个乘法器实现高阶FIR滤波的取舍之道
  • DAO实战指南:区块链与AI如何重塑组织协作与治理
  • 提升效率300%的OneNote插件终极指南:160+功能完全解锁笔记生产力