启动是从文件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 好像还有一件事没有记下来,就是vivi是怎么启动到linux的。这是vivi执行了boot 命令,调用了 vivi/lib/boot_kernel.c 中的command_boot()函数。这样linux就启动了。 到这里main就结束喽
s3c2440 vivi的启动过程
最新推荐文章于 2022-02-25 19:38:17 发布