norflash:可线性访问(和内存的访问方式相同)
nandflash: 不可线性访问,必须配个专门的程序访问
Linux启动:
1. 引导程序 bootloader,为内核启动准备环境
2.启动内核(kernel)
3. 加载根文件系统(挂载)
1.bootloader启动(裸机程序)--uboot.bin
--为内核启动准备环境并引导内核启动
初始化CPU(工作模式)
初始化异常向量表
初始化栈
初始化时钟
关看门狗
初始化内存
关闭Cache
关闭MMU
初始化相关的硬件(串口-调试,网口)
集成相关的协议
搬移内核到内存
向内核传参(根文件系统类型/位置,控制台,init进程,ip(如果需要))
启动内核(PC指向内核所在的内存地址)
--bootloader不再控制CPU,CPU的控制权彻底移交给
内核
2.内核(一个大的程序并为用户提供操作接口)--永不停止
进程管理,内存管理,网络管理,文件管理,设备管理
内核启动到最后阶段时:加载根文件系统(以挂载的形式)
启动init进程-> shell -> userapp
3.根文件系统
可执行程序(系统程序,系统命令,用户程序)
配置文件
库(静态/动态)
普通文件(文本/mp3/jpg)
bl main:相对跳转(PC加偏移)短跳转,加载地址与链接地址无关,地址无关代码
Idr pc,0xxxxx :绝对跳转,直接给PC赋地址 长跳转
加载地址与链接地址必须保持一致,地址相关代码
Linux内核配置过程
下载一个bootloader到norflash的0地址处(norflash被接到2440的0地址处)
系统上电后 PC指向norfalsh的0地址开始运行bootloader,bootloader搬移内核到内存
在arm板启动倒计时时按enter进入配置
Uboot 命令:
reset 重启uboot
setenv abc 123 设置环境变量
保存环境变量(到nand)
savenv
setenv abc 删除环境变量
ping 目标ip
tftp 0x30008000 ulmage
bootm 0x30008000(启动内核)
(go 0x30008000 运行程序)
printenv(print):看环境
reset:重启
setenv abc 123:设置一个新的abc为123(set abc 456:设置已有的abc为456)
setenv abc:删除abc
saveenv:保存修改