保姆级教程:在Ubuntu 20.04上搞定海思SS524/SS522 SDK编译与固件烧录
海思SS524/SS522开发实战从零构建嵌入式Linux系统的完整指南作为一名长期深耕嵌入式开发的工程师我深知从零开始搭建一个完整的开发环境有多么令人头疼。特别是当你拿到一块全新的开发板面对陌生的SDK和工具链时那种既兴奋又忐忑的心情我深有体会。本文将基于海思SS524/SS522平台带你一步步完成从Ubuntu环境配置到最终固件烧录的全过程重点解决那些官方文档没有明确说明的坑点。1. 开发环境准备与SDK解析在开始编译之前我们需要搭建一个稳定可靠的开发环境。不同于常见的x86平台开发嵌入式Linux开发需要特别注意工具链版本和依赖库的兼容性。1.1 Ubuntu 20.04基础环境配置首先确保你的Ubuntu 20.04系统已经更新到最新状态sudo apt update sudo apt upgrade -y接下来安装必要的开发工具和库文件。这里有几个关键点需要注意mtd-utils版本海思SDK对mtd-utils有特定要求建议安装2.1.2版本交叉编译工具链海思提供了定制的arm-mix410-linux工具链安装基础依赖包sudo apt install -y build-essential git u-boot-tools \ zlib1g-dev liblzo2-dev uuid-dev pkg-config automake \ libncurses5-dev bison flex libssl-dev bc1.2 SDK目录结构解析解压海思提供的SDK包后你会看到如下目录结构SS524V100_SDK_V2.0.1.1/ ├── osdrv/ # 驱动和操作系统相关 │ ├── opensource/ # 开源组件(kernel, uboot等) │ ├── pub/ # 公共头文件和库 │ └── tools/ # 开发工具 ├── package/ # 应用程序包 └── scripts/ # 构建脚本特别注意不同版本的SDK目录结构可能略有差异建议先阅读SDK中的ReleaseNotes.txt文件。2. U-Boot编译与定制U-Boot作为系统的引导程序是开发过程中需要首先处理的部分。海思对标准U-Boot进行了大量定制我们需要特别注意补丁的应用和配置选项。2.1 获取并打补丁进入SDK中的u-boot目录cd osdrv/opensource/uboot/u-boot-2020.01应用海思提供的补丁patch -p1 ../u-boot-2020.01.patch2.2 配置与编译根据你的芯片型号选择对应的默认配置# SS524V100 cp configs/ss524v100_defconfig .config # SS522V100 cp configs/ss522v100_defconfig .config启动配置菜单进行定制make ARCHarm CROSS_COMPILEarm-mix410-linux- menuconfig关键配置项CONFIG_SYS_TEXT_BASE: 文本段基地址CONFIG_BOOTCOMMAND: 默认启动命令CONFIG_BOOTARGS: 内核启动参数开始编译make ARCHarm CROSS_COMPILEarm-mix410-linux- -j$(nproc)编译完成后生成的关键文件u-boot.bin: 原始二进制文件u-boot-z.bin: 带校验头的可烧写镜像3. Linux内核编译与优化海思SS524/SS522使用的是经过深度定制的Linux 4.9内核我们需要特别注意内核配置和设备树的处理。3.1 内核源码准备进入内核源码目录cd osdrv/opensource/kernel解压并打补丁tar -zxf linux-4.9.37.tar.gz cd linux-4.9.y patch -p1 ../linux-4.9.37.patch3.2 内核配置选择默认配置文件# SS524V100 cp arch/arm/configs/ss524v100_defconfig .config # SS522V100 cp arch/arm/configs/ss522v100_defconfig .config启动配置菜单make ARCHarm CROSS_COMPILEarm-mix410-linux- menuconfig重要配置项确保CONFIG_CMDLINE与U-Boot的bootargs一致启用CONFIG_HISI_SDK相关选项根据实际需求配置视频编解码模块3.3 编译与安装编译内核镜像make ARCHarm CROSS_COMPILEarm-mix410-linux- uImage -j$(nproc)编译模块make ARCHarm CROSS_COMPILEarm-mix410-linux- modules -j$(nproc)编译设备树make ARCHarm CROSS_COMPILEarm-mix410-linux- dtbs编译完成后关键文件位于arch/arm/boot/uImage: 内核镜像设备树文件在arch/arm/boot/dts/目录下4. 根文件系统构建BusyBox提供了最基础的根文件系统支持海思SDK中已经包含了经过测试的版本。4.1 BusyBox编译进入BusyBox源码目录cd osdrv/opensource/busybox/busybox-1.27.2应用补丁patch -p1 ../busybox-1.27.2.patch配置并编译make ARCHarm CROSS_COMPILEarm-mix410-linux- defconfig make ARCHarm CROSS_COMPILEarm-mix410-linux- menuconfig make ARCHarm CROSS_COMPILEarm-mix410-linux- -j$(nproc) make ARCHarm CROSS_COMPILEarm-mix410-linux- install4.2 构建完整根文件系统创建基本的文件系统结构mkdir rootfs cd rootfs mkdir -p bin sbin etc dev lib proc sys tmp usr var复制BusyBox生成的文件cp -a ../busybox-1.27.2/_install/* .添加必要的设备节点sudo mknod dev/console c 5 1 sudo mknod dev/null c 1 3创建基本的初始化脚本etc/inittab::sysinit:/etc/init.d/rcS ::respawn:-/bin/sh ::ctrlaltdel:/bin/umount -a -r5. 固件烧写与调试海思提供了专用的烧写工具ToolPlatform支持通过USB和串口进行固件烧写。5.1 硬件连接准备你需要准备USB转TTL串口线推荐CP2102或FT232芯片开发板的串口连接器网线用于TFTP传输连接示意图PC USB端口 ↔ USB转TTL ↔ 开发板串口 PC以太网口 ↔ 交换机 ↔ 开发板以太网口5.2 使用ToolPlatform烧写启动ToolPlatform工具选择正确的串口号和波特率(115200)加载编译好的U-Boot镜像按照提示进入烧写模式常见问题解决如果工具无法识别设备检查串口驱动是否正确安装烧写失败时尝试降低波特率或更换USB端口确保开发板处于正确的启动模式(SPI NOR/NAND)5.3 通过TFTP烧写内核和文件系统配置开发板网络参数setenv ipaddr 192.168.1.100 setenv serverip 192.168.1.2 setenv netmask 255.255.255.0 saveenv烧写内核镜像tftp 0x42000000 uImage sf probe 0 sf erase 0x100000 0x400000 sf write 0x42000000 0x100000 ${filesize}烧写文件系统tftp 0x42000000 rootfs.sqfs sf probe 0 sf erase 0x500000 0x900000 sf write 0x42000000 0x500000 ${filesize}6. 系统启动与验证完成所有烧写后重启开发板你应该能在串口终端看到启动日志。如果系统未能正常启动可以检查以下方面U-Boot阶段问题确认bootcmd环境变量设置正确检查内存地址和大小参数是否匹配硬件内核启动问题确认内核镜像和设备树正确烧写检查bootargs参数是否与内核配置一致文件系统问题确认文件系统镜像完整检查挂载参数和分区表设置一个典型的成功启动日志如下U-Boot 2020.01 (Mar 01 2023 - 15:30:45 0800) DRAM: 128 MiB Flash: 16 MiB In: serial Out: serial Err: serial Net: eth0 Hit any key to stop autoboot: 0 ## Booting kernel from Legacy Image at 42000000 ... Image Name: Linux-4.9.37 Created: 2023-03-01 7:30:45 UTC Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 3012456 Bytes 2.9 MiB Load Address: 40008000 Entry Point: 40008000 Verifying Checksum ... OK ## Flattened Device Tree blob at 43000000 Booting using the fdt blob at 0x43000000 Loading Kernel Image ... OK Loading Device Tree to 4df46000, end 4df4e1b3 ... OK Starting kernel ... [ 0.000000] Booting Linux on physical CPU 0x0 ... [ 7.123456] VFS: Mounted root (squashfs filesystem) readonly on device 31:2. [ 7.234567] Freeing unused kernel memory: 1024K / #
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2455760.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!