U-boot代码函数调用关系

U-boot代码函数调用关系

本文以arm926ejs为例,分析了整个uboot代码的启动过程。

/cpu/arm926ejs/start.S //设置堆栈,申请中断,开辟内存空间

-> _armboot_start()
/lib_arm/board.c    //flash,网卡,内存,波特率,显示等功能初始化

    -> cpu_init() //初始化所依赖的cpu
    /cpu/arm926ejs/cpu.c

    -> board_init()
    /board/atmel/at91sam9261ek/at91sam9261ek.c //ARM底层寄存器设置(lcd、端口、网卡、ram、串口、spi总线)

        -> console_init_f()
        /common/console.c //串口终端控制(输入、输出方式、指令处理)

    -> interrupt_init()
    /cup/arm926ejs/at91sam926x/interrupts.c //中断(9261未定义)

        -> reset_timer_masked()
        /cup/arm926ejs/at91sam926x/interrupts.c

    -> env_init()
    /common/env_dataflash.c
    <- 取决于env保存位置(9261:#define CFG_ENV_IS_IN_DATAFLASH 1)

    -> init_baudrate()
    /lib_arm/board.c

        -> simple_strtoul() //解析字符串中的8,10,16进制数
        /lib_generic/vsprintf.c //解析输入的字符串

    -> serial_init()
    /cpu/arm926ejs/at91sam926x/serial.c //串口

    -> console_init_f()
    /common/console.c   //

    -> display_banner()
    /lib_arm/board.c

    -> (X) print_cpuinfo()
    /cpu/arm926ejs/cupinfo.c //cpu information

    -> (X) checkboard()
   
    -> dram_init() //RAM初始化
    /board/atmel/at91sam9261ek/at91sam9261ek.c

    -> display_dram_config()
    /lib_arm/board.c

    -> (X) flash_init()

    -> (X) display_flash_config()
    /lib_arm/board.c

    -> lcd_setmem()
    /common/lcd.c //设置对应的板级LCD的驱动

    -> mem_malloc_init() //开辟内存空间
    /lib_arm/board.c

    -> puts()
    /common/console.c

    -> nand_init()
    /drivers/nand/nand.c

        -> nand_init_chip()
        /drivers/nand/nand.c

            -> board_nand_init()
            /board/atmel/at91sam9261ek/at91sam9261ek.c

            -> nand_scan()
            /drivers/nand/nand_base.c
            <- 获取nand的参数,根据/include/linux/mtd/nand_ids.h识别(CFG_NAND_LEGACY模式)
            <- 获取nand的参数,根据/drivers/nand/nand_ids.c识别(非CFG_NAND_LEGACY模式)
      
    -> AT91F_DataflashInit()
    /drivers/dataflash.c

        -> AT91F_SpiInit()
        /cup/arm926ejs/at91sam926x/spi.c

        -> AT91F_DataflashProbe()
        /drivers/at45.c //设置DataFlash

    -> dataflash_print_info()
    /drivers/dataflash.c


    -> env_relocate()   
    /common/env_common.c

    -> getenv_IPaddr()

    -> devices_init()
    /common/devices.c

        -> drv_lcd_init()
        /commom/lcd.c

            -> lcd_init()
            /commom/lcd.c

                -> lcd_ctrl_init()
                /cup/arm926ejs/at91sam926x/lcd.c

                -> lcd_clear()
                /commom/lcd.c

                    -> lcd_initcolregs()

                    -> lcd_setcolreg()
                    /cup/arm926ejs/at91sam926x/lcd.c

                -> lcd_enable()
                /cup/arm926ejs/at91sam926x/lcd.c

            -> device_register()
            /common/devices.c

        -> drv_system_init()
        /common/devices.c
        <- 主要是初始化了serial,如果不用软件FIFO,则将/cpu/arm926ejs/at91sam926x/serial.c中的方法引入
       
            -> device_register()
            /common/devices.c

    -> jumptable_init()
    /common/exports.c

    -> console_init_r()
    /common/console.c

    -> board_late_init()
    /board/atmel/at91sam9261ek/at91sam9261ek.c
       
        -> at91sam9261ek_dm9000_init()
        /board/atmel/at91sam9261ek/at91sam9261ek.c

        -> eth_init()
        /drivers/dm9000x.c
        /cpu/arm926ejs/at91sam926x/ether.c

    -> eth_initialize()
    /net/eth.c

    -> main_loop()
    /common/main.c

        -> getenv()
        /common/cmd_nvedit.c

        -> run_command()
        /common/main.c

        -> readline()
        /common/main.c

        -> run_command()
        /common/main.c

            -> process_macros()
            /common/main.c

            -> parse_line()
            /common/main.c

            -> find_cmd()
            /common/command.c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值