如何快速创建基础目录结构

准备工作

  1. 硬件需求

    • S3C2440开发板(如友善之臂Mini2440)
    • 12V/1A直流电源
    • J-Link或USB转串口调试器
    • 网线(用于TFTP/NFS传输)
    • SD卡或NOR Flash(可选备用启动方式)
  2. 软件环境

    • 交叉编译工具链(推荐 arm-linux-gcc-4.4.3
    • 源码包:U-Boot(2020+版本)、Linux内核(4.19+)、Busybox(1.35+)
    • 烧录工具:J-Flash(NOR启动)或 oflash(NAND启动)
    • TFTP服务器(如 tftpd-hpa

构建系统组件

步骤1:编译U-Boot

tar xvf u-boot-202x.xx.tar.gz
cd u-boot
make s3c2440_defconfig  # 使用2440默认配置
make CROSS_COMPILE=arm-linux-  # 生成u-boot.bin

关键配置

  • CONFIG_S3C2440=y(启用SoC支持)
  • CONFIG_ENV_OFFSET=0x30000(环境变量存储偏移)

步骤2:编译Linux内核

make mini2440_defconfig  # 板级预设配置
make zImage CROSS_COMPILE=arm-linux- -j4

驱动必选项

  • NAND Flash驱动:MTD_NAND_S3C2410
  • 网卡驱动:DM9000(需确认板载芯片)

步骤3:制作根文件系统

cd busybox
make menuconfig  # 启用静态编译:Settings → Build static binary
make installmkdir rootfs && cd rootfs
cp -r busybox/_install/* .
mkdir proc sys dev etc

推荐文件系统

  • YAFFS2(NAND专用):mkyaffs2image rootfs rootfs.yaffs2
  • UBIFS(更现代):mkfs.ubifs -r rootfs -m 2048 -e 129024 -c 2000 -o rootfs.ubifs

烧录实战流程

方案A:NOR Flash启动(适用于首次烧写)

  1. 连接J-Link到板载JTAG口
  2. 使用J-Flash擦除NOR Flash(地址范围 0x00000000~0x00200000
  3. 烧写 u-boot.bin0x0
  4. 重启开发板,串口输出按空格进入U-Boot命令行

方案B:U-Boot网络烧写(已存在U-Boot时)

  1. 配置TFTP服务器
    zImagerootfs.yaffs2 放入 /tftpboot
  2. U-Boot传输文件
    setenv ipaddr 192.168.1.123    # 开发板IP
    setenv serverip 192.168.1.100  # TFTP服务器IP
    tftp 0x31000000 zImage         # 内核加载到内存
    tftp 0x32000000 rootfs.yaffs2  # 文件系统加载
  3. 烧写NAND Flash
    nand erase 0x100000 0x500000   # 擦除内核分区(示例地址)
    nand write 0x31000000 0x100000 0x500000
    nand erase 0x600000 0xFA00000  # 擦除文件系统分区
    nand write.yaffs 0x32000000 0x600000 $(filesize)

启动参数配置

在U-Boot中设置启动命令:

setenv bootcmd "nand read 0x31000000 0x100000 0x500000; bootm 0x31000000"
setenv bootargs "root=/dev/mtdblock2 rootfstype=yaffs2 console=ttySAC0,115200"
saveenv  # 保存配置

故障排查

  • 内核无法启动:检查 bootargs 中的MTD分区号是否与烧录位置匹配(通过 cat /proc/mtd 验证)
  • 文件系统挂载失败:确认文件系统类型(yaffs2/ubifs)与内核配置一致
  • 网络不通:检查DM9000驱动配置及PHY地址(常见为 CONFIG_DM9000_BASE=0x20000000

安全提示

  1. 操作前备份:使用 nand dump 导出原始固件
  2. 避免电压不稳:烧录时断开非必要外设
  3. 优先使用NOR启动:变砖后可通过JTAG恢复

引用说明

  • U-Boot官方文档:https://www.denx.de/wiki/U-Boot
  • Linux内核S3C2440配置参考:arch/arm/configs/s3c2440_defconfig
  • S3C2440芯片手册:Samsung “S3C2440A 32-Bit CMOS Microcontroller User’s Manual”
  • 文件系统工具:mkyaffs2image (http://www.aleph1.co.uk/yaffs) / mkfs.ubifs (http://www.linux-mtd.infradead.org)

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/6125.html

(0)
酷番叔酷番叔
上一篇 2025年7月2日 17:54
下一篇 2025年7月2日 18:17

相关推荐

  • 如何解决Ubuntu 22.04频繁崩溃问题?

    在Linux系统上安装Python是开发者和系统管理员的常见需求,以下是一份详细、专业且符合最佳实践的指南,涵盖多种安装方法及注意事项,确保过程安全可靠,准备工作检查现有版本终端执行:python3 –version # 检查Python 3python –version # 检查Python 2(旧系统可……

    2025年7月5日
    1000
  • 占用TCP端口8080如何终止?

    端口占用的原理端口分类0-1023:系统特权端口(需root权限),如HTTP(80)、SSH(22),1024-49151:用户端口,供普通应用程序使用,49152-65535:动态/私有端口,占用本质进程通过调用bind()系统调用绑定IP和端口,再通过listen()进入监听状态,手动占用端口的步骤方法1……

    2025年6月22日
    1400
  • Linux下如何高效解析JSON数据?

    专用工具:jq(推荐首选)jq 是专为JSON设计的轻量级命令行处理器,支持过滤、转换和格式化,安装方法:sudo apt install jq # Debian/Ubuntusudo yum install jq # CentOS/RHEL常用操作示例:提取字段值(如解析data.json中的name字段……

    2025年6月28日
    1100
  • Debian/Ubuntu如何用apt管理软件?

    在Linux系统中,查询某个软件包是否已安装是日常管理中的常见需求,不同发行版使用不同的包管理工具,因此方法各有差异,以下详细介绍主流Linux发行版的查询方法,并解释如何解读结果,操作前请确认您的发行版类型(通过命令 cat /etc/os-release 查看),这些系统基于Debian,包管理工具为 dp……

    2025年7月5日
    800
  • Tomcat启动失败?bin目录有妙招

    在Linux系统中停止Tomcat需要遵循正确的操作流程,以避免数据丢失或服务异常,以下是经过验证的几种可靠方法,适用于不同部署场景:通过Tomcat自带脚本停止(推荐首选)这是最安全的方式,利用Tomcat内置的shutdown.sh脚本实现平滑停止:# 执行停止命令./shutdown.sh# 验证是否停止……

    2025年7月8日
    900

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信