Linux开发驱动底层环境启动流程
Uboot编译:rm -rf 删除命令
tar xjf 解压uboot文件
patch -p1 < ../u-boot-1.1.6.jz2440.patch
打补丁 -p1 指示忽略第一个斜杠前因为已经在当前目录。 打好补丁之后配置文件make 100ask24x0_config之后make 配置文件是厂家提供好的。
Make后生成bin文件,在Windows下进入oflash目录烧写这个文件。选择Open jtag S2C2440 nand flash 0块 0 2 0 0 0这几个数字
烧写之后进入启动界面之后uboot命令 按help查看支持哪些命令。?Md 查看 md命令 Print 命令查看环境变量
设置环境变量 set xxxx xx save reset重启
Uboot 的终极目的就是要启动内核。 Make config 就相当于执行命令 100ask24x0_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t 100ask24x0 NULL s3c24x0
MKCONFIG := $(SRCTREE)/mkconfig
$(@:_config=) $(@ 表示目标文件100ask24x0 _config=) 表示
1 / 9
替换掉他用后面的arm arm920t 100ask24x0 NULL s3c24x0 100ask24x0
最后就执行这个命令
Mkconfig 100ask24x0 arm arm920t 100ask24x0 NULL s3c24x0
找到脚本文件mkconfig #!/bin/sh表示他是用bin目录下sh解释执行,后面是传入的参数。这个配置过程它做了一些连接工作,把arm board arch 链接到现在的文件。
编译时的make 做的工作:用到了上面配置的config.mk (.a文件表示所有编译好的文件打包成成的一个库)
OBJS = cpu/arm920/xxxx Lib +=xxxx.a
ALL = $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map $(U_BOOT_NAND)
依赖$(obj)u-boot.bin文件 $(obj)u-boot.bin他又依赖于
2 / 9
$(obj)u-boot: depend version $(SUBDIRS) $(OBJS) $(LIBS) $(LDSCRIPT)
UNDEF_SYM=`$(OBJDUMP) -x $(LIBS) |sed -n -e 's/.*\\(__u_boot_cmd_.*\\)/-u\\1/p'|sort|uniq`;\\
cd $(LNDIR) && $(LD) $(LDFLAGS) $$UNDEF_SYM $(__OBJS) \\
--start-group $(PLATFORM_LIBS) \\
-Map u-boot.map -o u-boot
得到的bin文件就是这个
.a文件如何组织连接在lds连接文件有说明 链接地址在0x33f80000就是说应该在这个地址运行
$(__LIBS)
--end-group
3 / 9
比如从0x00000000 到0x08000000是128M空间 2^27次方=2^7*2^10*2^10=128M 搜索命令 grep “” - nR 内存一共64M0x33f80000空出512K
UBOOT做一些工作:进入管理模式、关看门狗中断、初始化存储控制器、设置栈IRQFIQ、重定位(NORflash不能像内存一样写)、从flash拷到sdram、到他该运行的地址0x33f80000、清BSS段、调用C函数
4 / 9
从上往下依次是512K UBOOT 然后是用来实现malloc接下来是全局参数,在接下来就是各种模式的栈。
接下来刚才调用的C函数在这里执行完成大部分初始化包括以下初始化。
5 / 9
Linuxarm底层启动流程简介
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)