OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4213|回复: 0

学习嵌入式Linux-JZ2440-U-Boot分析

[复制链接]

22

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
233
金钱
233
注册时间
2012-9-7
在线时间
3 小时
发表于 2015-6-9 15:35:22 | 显示全部楼层 |阅读模式
     U-Boot的代码量还是挺大的,文件就有几千了,但是因为它的文件结构还是挺鲜明的。下面是对代码的分析,分析代码的时候还是用SourceInsight好一些,不过貌似它对汇编还不支持。
       代码运行的第一个文件在CPU/arm920t/start.S中,代码一开始是一个向量表,但是只用到了Reset向量,其他的都只是一个循环。 下面是代码中做的事情:
       1.关看门狗
       2.关中断
       3.初始化CPU,包括清楚I/D Caches,关闭MMU和Caches
       4. 跳转到lowlevel_init,这是和board有关的,设置存储控制器,这个函数在board/xxx/lowlevel_init.c中实现的,xxx代表了某种开发板的文件夹。
       5.设置栈
       6.复制U-Boot代码到RAM中,使用函数CopyCode2Ram,这个函数在board/xxx/boot_init.c中实现的,同样的,xxx代表了某种开发板的文件夹。
       7.清除BSS段
       8.跳转到第二阶段执行start_armboot();
       第二阶段的入口地址在lib_arm/board.c中的start_armboot(),在这个函数中做了这些事情:
       1.初始化两个结构体,gd,gd->bd。
       2.使用init_sequence结构体中定义的初始化函数完成初始化:包括CPU_init;board_initinterrupt_init;env_init;init_baudrate;serial_init; console_init_f;display_banner;dram_init;display_dram_config,这些函数的实现都在文件lib_arm的board.c中实现的。
       3.如果宏CFG_NO_FLASH=1,初始化Flash
       4.如果宏CONFIG_VFD=1,设置VFD
       5.如果宏CONFIG_LCD=1,初始化LCD
   6.初始化malloc所需指针
        7.如果宏CONFIG_COMMAND=1 & CFG_CMD_NAND=1,初始化NAND;
8.如果宏CONFIG_HAS_DATAFLASH=1,初始化DataFlash。
9.初始化环境变量
10.设置IP地址和MAC地址
11.初始化console有关的功能函数
        12.初始化Port
13.开中断
        14.初始化USB
    15.如果宏CONFIG_DRIVER_CS8900,初始化网卡
 16.进入main_loop循环。
       main_loop循环是在common/main.c中实现的,在函数中主要做了这些事:
       1.bootdelay是延时等待时间,超过时间便会开始启动内核。
       2.在abortboot函数里面,等待bootdelay秒时间来读取串口看看是否输入了正确的按键。
3.如果有正确输入,则s=getenv("menucmd")来读取菜单命令,然后执行菜单命令。
4.否则则执行s=getenv("bootcmd");来读取启动内核命令,然后执行,命令实现的函数为do_bootm(),在common/cmd_bootm.c中
do_bootm()中所做的事情包括:
1.读取image头部,然后进行CRC校验。
       2.然后执行do_bootm_linux,在lib_arm/armlinux.c文件中。
在do_bootm_linux中,最后执行theKernel=(void(*)(int,int,uint)ntohl(hdr->ih-ep)),跳转到内核的入口地址去启动内核。
这个分析前面的部分分析的相对全面一些,后面的几个文件分析的不够完整,但是一开始看代码就要这样先看结构,不要过分追求细节。 
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 23:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表