启动是从文件vivi/arch/s3c2440/head.S开始的
1. 在这个文件中,做了这样的工作:
(1) 关闭看门狗
(2) 禁止所有中断
(3) 初始化system clock
(4) 初始化串口
(5) 初始化nand flash相关的控制寄存器
(6) 把vivi copy 到 SDRAM上,最后把pc指向ram
(7) 设置堆栈
(8) call 一个叫做main的函数。这个函数是c写的
2. main()这个函数在vivi/init/main.c中
(1) 程序正常跳转到这里后,首先打印一些进本信息
(2) 调用若干个初始化的函数
<1> reset_handler() vivi/lib/reset_handler.c中
(主要做了clear memory的工作)
<2> board_init() (没找到)
<3> mem_map_init() vivi/arch/mmu.c中
(如果使用nand flash,会在这里使它看起来线性化;清空cache;invalidate I & D tlb)
mmu_init vivi/arch/mmu.c中
(初始化cache,load页表指针,mmu 使能等等)
<4> heap_init 初始化堆 vivi/lib/heap.c
(这里好像malloc了一段空间,具体的没看懂)
<5> mtd_dev_init vivi/driver/mtd/mtdcore.c中
mtd_init() 在vivi/driver/mtd/maps/s3c2440_flash.c 中,这里根据所使用的flash,做相应的cpu控制初始化,分配内存
add_command(&flash_cmd) 注册了flash这个用户命令
<6> init_priv_data() vivi/lib/priv_data/rw.c中
读出boot的基本参数
<7> misc() (没找到)
init_builtin_cmds() vivi/lib/command.c中
(注册用户的基本命令,包括boot, bon, load, help 等等)
<8> boot_or_vivi() 就在main.c中,等待用户输入,有输入进入vivi_shell,没有输入,超时后启动linux
到这里main结束
vivi是怎么启动到linux的。这是vivi执行了boot命令,调用了 vivi/lib/boot_kernel.c 中的command_boot()函数。这样linux就启动了。
vivi启动过程------s3c2440
最新推荐文章于 2023-07-25 15:55:38 发布