jz2440分区及启动的基础概念

前言

linux软件层次

  • 引导程序: 分为两部分 硬件中的固化boot代码 和 BootLoader代码, 其中固化的boot代码可有可无, BootLoader是烧写上去的
    • PC linux: 分为 BIOS (固件程序) 和 BootLoader(GRUB等程序)
    • 执行过程: BIOS执行硬件检测 和 资源分配, 之后将BootLoader读取到内存中, 开始执行BootLoader内容
    • 执行作用: 将内核读取到内存中, 跳转到内核的入口运行, 正式执行操作系统程序
    • 嵌入式 linux: BootLoader与硬件的依赖性很强, S3C2440 使用的是u-boot
    • 执行过程: 初始化基本硬件, 加载BootLoader, 读取uboot环境变量, 启动uboot.
    • 执行作用: 和 pc linux 是一样的. 读取内核并执行.
  • Linux内核 (kernel): 嵌入式开发板定制的内核 和 其启动参数
  • 文件系统 (file system): 即Linux中的文件系统
  • 应用程序: 即用户执行的应用程序

jz2440的分区和启动

s3c2440 的线性地址分配:
address mapping

jz2440 的分区: (在uboot下, 用 mtdparts 查看分区情况)

jz2440 物理设备 大小(byte) 线性地址
SFR Area 寄存器 0x4800_0000 - 0x5B00_0020
SDRAM 64M 0x3000_0000 - 0x3400_0000
Nor Flash 2M 0x0000_0000 - 0x0020_0000
- u-boot - 0x0000_0000 开始
Nand Flash 256M 非总线设备, 无法映射地址
- bootloader 256K 0x0000_0000 - 0x0004_0000
- params 128K 0x0004_0000 - 0x0006_0000
- kernel 2M 0x0006_0000 - 0x0026_0000
- root 253.6M 0x0026_0000 - 0x1000_0000

jz2440开发板启动方式:

  • Nor flash: JLink 只能烧录 Nor flash. 默认使用这种方式! 使用nfs文件系统
    Nor flash boot
  • Nand flash: 使用本地文件系统启动. 也可用于裸跑测试. (Steppingstone 就是 BootSRAM)
    Nand flash boot
  • **以下部分初学先忽略! **
  • 如果是通过uboot的内核命令行给MTD层传递MTD分区信息, 内核读取到的分区信息始终和u-boot中的保持一致(推荐的做法)
    # 开发板 uboot
    setenv bootargs noinitrd console=ttySAC0 root=/dev/mtdblock3 rootfstype=jffs2 mtdparts=nand_flash:128k(u-boot)ro,64k(u-boot envs),3m(kernel),30m(root.jffs2),30m(root.yaffs)

    # ubuntu shell, 内核配置时使能
    Device Drivers -> Memory Technology Device (MTD) support -> Command line partition table parsing
  • 如果是把分区信息写在内核源代码MTD里定义好的方法, 要保证它和u-boot中的保持一致,即同步修改uboot及内核的相关部分
  • 参考: 嵌入式linux flash分区配置
  • **以上部分初学先忽略! **

原创于 DRA&PHO