没有合适的资源?快使用搜索试试~ 我知道了~
u-boot的board_init_f和board_init_r阶段执行任务的对比
5星 · 超过95%的资源 需积分: 42 6 下载量 198 浏览量
2022-07-25
16:52:01
上传
评论 1
收藏 90KB DOCX 举报
温馨提示
试读
8页
u-boot的board_init_f和board_init_r阶段执行任务的对比
资源详情
资源评论
资源推荐
u-boot 的 board_init_f 和 board_init_r 阶段执行任务的对比
一.以下为 board_init_f 阶段执行内容如下:
1. setup_mon_len, //计算 u-boot 程序的长度放入 gd->mon_len 中。
2. fdtdec_setup, //检查设备树的有效性。
3. initf_malloc, //分配堆的大小
4. log_init //初始化系统的 log 记录系统。
5. console_record_init //控制台存储空间申请。
6. arch_cpu_init //CPU 初始化
7. initf_dm //创建设备模型
8. arch_cpu_init_dm //初始化设备模型下的 riscv cpu 设备。
9. env_init //初始化环境变量。
10. init_baud_rate //初始化波特率
11. serial_init //串口设置。
12. console_init_f //控制台设备初始化。
13. display_options //打印 u-boot 版本
14. display_text_info //显示调试信息。
15. print_cpuinfo //显示 cpu 信息
16. show_board_info //显示开发板信息
17. dram_init //获取设备树中 memory 节点中的数据,来填写 gd->ram_size 和 gd->ram_base
18. 设置重定位目标地址:gd->relocaddr = gd->ram_top = DDR 的基地址+ddr 的长度。 这样就会把 u-boot 的重
新定位地址定位在了 ddr 内存空间的最末尾地址向地址减小的内存空间中。
19. fix_fdt, //设备树的单板特定操作
20. reserve_round_4k, //把全局变量中保存的重定位地址对齐到 4k 地址上。 gd->relocaddr &= ~(4096 - 1)
21. reserve_video, //为视频显示预留内存空间(由于没有定义,所以直接返回 0)
22. reserve_trace, //为 trace 预留内存空间(由于没有定义,所以直接返回 0)。
23. reserve_uboot, //为 u-boot 代码留出空间 gd->relocaddr -= gd->mon_len,gd->start_addr_sp = gd->relocaddr
24.reserve_malloc, //为堆预留地址空间。gd->start_addr_sp =gd->start_addr_sp - TOTAL_MALLOC_LEN
25. reserve_board, //为开发板信息预留内存空间 gd->start_addr_sp -= sizeof(struct bd_info)
26. reserve_global_data,// 在 ddr 中为全局变量数据结构预留数据空间:gd->new_gd=gd->start_addr_sp -=
sizeof(gd_t)
27. reserve_fdt, // 在 ddr 中为设备树数据结构预留数据空间:gd->new_fdt = gd->start_addr_sp -= gd->fdt_size)
28. reserve_stacks, // gd->start_addr_sp 16 字节对齐。
29. dram_init_banksize,//设备树中 memory 节点中取出 BANK 参数填写到 gd->bd->bi_dram[bank].start 和.size 中。
30. show_dram_config, // 打印 DRAM 和 DDR 信息。
31. display_new_sp, //显示新的 SP 栈指针位置。
32. reloc_fdt, //重定位 fdt:把 gd->fdt_blob 开始的设备树数据复制到新的设备树地址 gd->new_fdt 中,然后
gd->fdt_blob=gd->new_fdt。
33. setup_reloc, // 把 gd 数据复制到新的 ddr 中为全局变量预留的新地址 gd->new_gd 中。
34. relocate_code: //调用 start.S 中的 relocate_code:代码段,开始把 u-boot 代码复制到 ddr 中重新定位的位
置上。并执行 elf 文件格式动态重新定位数据,函数,变量段的重新定位。
所以从以上知道:board_init_f 主要运行的 ddr 从 0x80200000 地址开始的 u-boot 代码段中,其主要初始化 cpu,串
口,设置 DDR 的工作范围,计算 u-boot 重定位地址到 ddr 的结束地址区域(计算方法为: 从 ddr 的最末尾地址开
nick-fei
- 粉丝: 1
- 资源: 40
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- mongodb数据库基本操作.pdf
- C#,布尔可满足性问题(Boolean Satisfiability Problem)算法与源代码
- C#,回文分割问题(Palindrome Partitioning Problem)算法与源代码
- C#,煎饼排序问题(Pancake Sorting Problem)算法与源代码
- C#,排列组合的堆生成法(Heap’s Algorithm for generating permutations)算法与源代码
- C#,老鼠迷宫问题的回溯法求解(Rat in a Maze)算法与源代码
- 6693eeb8d683458a07938615fba9e68f.apk
- C#,数值计算,解微分方程的龙格-库塔二阶方法与源代码
- C#,数值计算,用割线法(Secant Method)求方程根的算法与源代码
- C#,子集和问题(Subset Sum Problem)的算法与源代码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论5