little kernel編譯及啓動 [LK]

vendor/brand/proprietary/bootable/bootloader/lk/makefile
OUTBIN := $(BUILDDIR)/lk.bin
OUTELF := $(BUILDDIR)/lk


vendor/brand/proprietary/bootable/bootloader/lk/make/build.mk
$(OUTBIN): $(OUTELF)
        @echo generating image: $@
        $(NOECHO)$(SIZE) $<
        $(NOCOPY)$(OBJCOPY) -O binary $< $@
        $(NOECHO)cp -f $@ $(BUILDDIR)/lk-no-mtk-header.bin
        $(MKIMAGE) $@ img_hdr_lk.cfg > $(BUILDDIR)/lk_header.bin
        $(NOECHO)mv $(BUILDDIR)/lk_header.bin $@

        @echo linking $@
        $(NOECHO)$(LD) $(LDFLAGS) -T $(LINKER_SCRIPT) $(OUTPUT_TZ_BIN) $(ALLOBJS) $(LIBGCC) $(LIBSEC) $(LIBSEC_PLAT) $(wildcard $(PICACHU_LIB)) -o $@
        
        
vendor/brand/proprietary/bootable/bootloader/lk/makefile
ALLOBJS := \
        $(BOOTOBJS) \
        $(OBJS)
        
vendor/brand/proprietary/bootable/bootloader/lk/arch/arm/rules.mk
BOOTOBJS += \
        $(LOCAL_DIR)/crt0.o

vendor\brand\proprietary\bootable\bootloader\lk\arch\arm\crt0.S
bl        kmain

vendor\brand\proprietary\bootable\bootloader\lk\kernel\main.c
kmain
    thread_init_early //添加當前線程進 線程上下文(線程管理)
    platform_early_init
        uart_init_early(4個串口  #define CONFIG_BAUDRATE         921600)
        mt_gpio_set_default
            mt_gpio_set_default_chip(gpio0-163)
        (bootarg_addr: 0x4489ef00, bootarg_size: 0x167b)
        pmic_init(mt_pmic_6357.c)
        thread_resume(thread_create("bootstrap2", &bootstrap2, NULL, DEFAULT_PRIORITY, DEFAULT_STACK_SIZE));
        thread_resume(thread_create("iothread", &iothread, NULL, IO_THREAD_PRIORITY, DEFAULT_STACK_SIZE));

vendor\brand\proprietary\bootable\bootloader\lk\platform\product\platform.c        
    bootstrap2    
        platform_init
            mmc_legacy_init
                mmc_init
                    mmc_init_mem_card
                mt_part_register_device
                    part_init
                        read_gpt
                            parse_gpt_header

                            
                            
            bldr_load_dtb("boot")
                mboot_recovery_load_raw_part("boot") //bootimage_header  boot 頭文件
                //placed setup_fdt() after bldr_load_dtb() due to it set the fdt_header-> totalsize
                ret = setup_fdt((void *)dtb_kernel_addr, DTB_MAX_SIZE);    //0x200000);  //根據dts文件(0x44000000)創建fdt //g_fdt = fdt;
            leds_init
                mt65xx_leds_brightness_set //關閉背光
                    get_cust_led_dtsi   //從dtsi中得到device led的默認配置

            mt_disp_init((void *)g_fb_base); //"disp init" //FB base = 0x7f370000 //初始化framebuffer
                primary_display_init
                    disp_lcm_probe
                        (lcm_drv->get_params)lcm_get_params
                    disp_lcm_get_params
            
            boot_mode_select                
                unshield_recovery_detection
                    recovery_check_command_trigger
                        mboot_recovery_load_misc
                            mboot_recovery_load_raw_part("para")                            
                while(get_timer(begin)<50)
                    mtk_detect_key
                kernel_power_off_charging_detection
                    is_force_boot

            mboot_common_load_logo((unsigned long)mt_get_logo_db_addr_pa(), "logo"); // logo_db_addr_pa = 0x5e900000
                mboot_common_load_part("logo", "logo", logo_addr);
            
            mt_disp_show_boot_logo
                init_fb_screen
                fill_animation_logo
                mt_disp_update
                
            mt_disp_update
            
            mt65xx_bat_init  //battery
        
        
        
        target_init
        
        apps_init
            app->init(app);
                aboot_init
                shell_init
                mt_boot_init
                    boot_linux_from_storage
                        boot_linux
                            boot_linux_fdt
                                lk_jump64((u32)entry, (u32)tags, 0, KERNEL_64BITS);
            start_app(app);

        
    iothread

    
vendor/brand/proprietary/bootable/bootloader/lk/app/shell/shell.c:37:APP_START(shell)
vendor/brand/proprietary/bootable/bootloader/lk/app/aboot/aboot.c:1439:APP_START(aboot)
vendor/brand/proprietary/bootable/bootloader/lk/app/mt_boot/mt_boot.c:2068:APP_START(mt_boot)
        
vendor\brand\proprietary\bootable\bootloader\lk\app\mt_boot\mt_boot.c        
setup_fdt

        
vendor\brand\proprietary\bootable\bootloader\lk\platform\product\mt_leds.c
char *leds_name[MT65XX_LED_TYPE_TOTAL] = {
    "red",
    "green",
    "blue",
    "jogball-backlight",
    "keyboard-backlight",
    "button-backlight",
    "lcd-backlight",
};

char *leds_node[MT65XX_LED_TYPE_TOTAL] = {
    "/led@0",
    "/led@1",
    "/led@2",
    "/led@3",
    "/led@4",
    "/led@5",
    "/led@6",
};
            
            
            
aeon_lt8912b_fhd_dsi_vdo.c            
            primary_display_init
                

vendor/brand/proprietary/bootable/bootloader/lk/app/mt_boot/mt_boot.c
APP_START(mt_boot)
.init = mt_boot_init,
 APP_END


mt_boot_init
    boot_linux_from_storage
        mboot_android_load_bootimg_hdr(MTK_GPT_SCHEME_SUPPORT = yes)
        boot_linux

/* boot type definitions */
typedef enum {
    NORMAL_BOOT = 0,
    META_BOOT = 1,
    RECOVERY_BOOT = 2,
    SW_REBOOT = 3,
    FACTORY_BOOT = 4,
    ADVMETA_BOOT = 5,
    ATE_FACTORY_BOOT = 6,
    ALARM_BOOT = 7,
#if defined (MTK_KERNEL_POWER_OFF_CHARGING)
    KERNEL_POWER_OFF_CHARGING_BOOT = 8,
    LOW_POWER_OFF_CHARGING_BOOT = 9,
#endif
    FASTBOOT = 99,
    DOWNLOAD_BOOT = 100,
    UNKNOWN_BOOT
} BOOTMODE;

vendor\brand\proprietary\bootable\bootloader\lk\platform\product\boot_mode.c
boot_mode_select


CFG_BOOTIMG_LOAD_ADDR  0x40008000

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章