本文共 1004 字,大约阅读时间需要 3 分钟。
app/ 应用相关arch/ arm 体系 dev/ 设备相关include/ 头文件kernel/ lk系统相关 platform/ 相关驱动projiect/ makefile文件scripts/ Jtag 脚本target/ 具体板子相关
lk/arch/arm/ssystem-onesegment.ld 连接文件中 ENTRY(_start)指定 LK 从_start 函数开始,_start 在 lk/arch/start.S 。
start.S主要做一些基本的CPU的初始化再通过 bl lk_main ;跳转到 C代码中。
lk/top/main.c中有lk_main()函数的定义
lk_main() //lk/top/main.c apps_init(); //lk/app/app.c app->init(app); //会调用到lk/app/atc_boot/boot_kernel.c中的boot_kernel_init start_app(app); //会调用到lk/app/atc_boot/boot_kernel.c中的boot_linux_from_emmc theKernel (FDT_LOAD_ADDR_PHYS, 0, 0); //启动kernel
apps_start和apps_end都是在lk/app/app.ld文件中指定的,表示".apps"段
代码中通过APP_START宏向".apps"段添加代码
#define APP_START(appname) const struct app_descriptor _app_##appname __ALIGNED(sizeof(void *)) __SECTION(".apps") = { .name = #appname,#define APP_END };示例:(lk/app/atc_boot/boot_kernel.c)APP_START(atc_boot).init = boot_kernel_init,.entry = boot_linux_from_emmc,APP_END
转载地址:http://feuen.baihongyu.com/