jz2440分区及启动的基础概念
前言
- 嵌入式linux学习目录
- jz2440分区及启动的基础概念
- uboot之makefile分析
- uboot之源码分析
- uboot之定制指令
- 大致了解一下linux软件层次, 以及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 的线性地址分配:
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文件系统
- Nand flash: 使用本地文件系统启动. 也可用于裸跑测试. (Steppingstone 就是 BootSRAM)
- **以下部分初学先忽略! **
- 如果是通过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