ARM U-BOOT _armboot_start与_start (转载)
关于u-boot中 _start,_armboot_start,.word等概念的理解 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ?ldr r2,_armboot_start? 1. 汇编语言中所有定义的标号指的都是绝对地址,对标号的引用也就是绝对地址的引用. 2. 汇编中没有变量的概念,但是使用LDR指令可以实现类似C中变量的功能. 3. 汇编中的.word其实是变相的实现了C的变量功能,只是在使用上值得大家注意. 4. u-boot中start.S做了如下的多处定义: ??.globl?_armboot_start ??.globl?_bss_start ??.globl?_bss_end _bss_end: ?.word?_end >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ?? 其实就是一个变量的定义,这样在汇编中通过ldr实现了变量的操作. 而当在C语言中作为变量引用时又很方便. ?? 比如lib_arm/board.c中start_armboot()函数中对u-boot镜像大小的计算: ?monitor_flash_len = _bss_start - _armboot_start; ?? 这在C语言中就是简单的变量操作,但是如果直接使用 __bss_start-_start 的话那就一切都错了! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |