WF130701 陈帆 69 UBoot 和内核的交互

今日结果:
1》手动启动内核:
1. 进入u_boot命令系统下:(将u_boot 用Jlink烧写完成之后,使用超级终端连接开发板,重启开发板后,在倒计时5,4,3,2.... 之前按回车键,进入u_boot命令系统)此系统也可以使用u盘进行内核文件烧写
2.在此系统下: nand read 0x30008000 0x60000 0x267000  // 读入内核文件
3.bootm 0x30008000 启动内核文件
2》 do_bootm_linux )   找到函数在 Boot.c(lib_arm))中(启动内核的函数)
在u_boot 系统下:   printenv // 查看环境变量(linux)
bi_arch_number  // 机器码        bi_boot_params  // 写到内核的值是多少
mkimage Loadaddress 0x30008000 entry pointer 0x30008040
// 多的40为boot的头
theKernel(0, machid , bd->bi_boot_arm)   // 规定R0 = 0 ;   机器码 ;   启动参数的初始地址
3》Uboot 源码解析思路
1.从CPU/arm920T目录下找到start.s 文件(看懂每句汇编代码的执行的意义)
2.从汇编代码的ldr pc, _start_armboot  这条指令跳转到C的入口函数, start_armboot,这个函数uboot的C函数的入口函数。
3.我们手工启动linux 内核步骤分两步:
I, nand read 0x30008000 0x60000 0x267000 
II, bootm 0x30008000
4.从boot 命令中发现,会调用do_bootm_linux 函数。(lib_arm)的目录下
5.从这个函数中我们发现,uboot使用gd_t这个结构体,该结构体里面包含bd_t的数据结构
6.看一下,gd_t和bd_t里面的数据内容,会发现机器码,和存放启动参数的变量。
7.在do_boot_linux函数内部我们也发现theKernel函数是指向linux内核的函数指针,该函数指针存放在image->ep字段中。
8.在theKernel 函数后就真正跳转到linux内核了,该函数的三个参数很重要:R0 = 0; R1 = 机器码;R2 = 启动参数的内存地址。
  (运行到theKernel函数时,uboot的声明周期也就结束了。
9.我们发现在do_bootm_linux 函数中启动参数到底是多少?机器码到底是多少?
10.因此我们重新回到start_armboot函数中寻找
11.我们发现gd这个结构体指针没有malloc而是通过直接赋值于一个内存地址,这个地址是经过详细规定的具体看PPT内存规定
12.在start_armboot 函数中有一个很重要的函数指针数组叫init_sequence, 该数组是uboot初始化开发板的一系列函数的集合。
13.通过for语句一一执行,达到初始化的目的。
14.首先分析board_init 函数(该函数每个开发板目录下都有,我们要找到mini2440.c 这个文件做了四件事情:
I. 设置MPLL和UPLL 来启动CPU时钟频率
II.通过对GPIO口的结构体的定义简化访问
III.对gd这个结构体的bd里面的机器码,启动参数的地址,直接赋值,mini2440的机器码为1999, 启动参数内存地址为:0x30000100.


明日计划:消化陈老师今天讲的所有知识,然后有时间对对汇编的编程进行学习。
感想:感觉培训好快,已经剩下三次课了,不过没有办法,有相聚,就有分离的时候,真心的祈祷,每个人都是在卓越的这个大家庭中,找到各自的方向和收获到硕果累累的知识库。但是对自己来说,又是另一个启程。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Macle_Chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值