“*”是婚配任件名的通配符
读万卷书,不如走一步路。动脱手指,编译一下U-Boot就晓得了,若是你还不清晰怎样编译或者没有的话,你参考我的文章搭建一个:
正在SECTIONS号令的最起头,地址从计数器的当前值起头计较。而.text段描述并没有指定具体内容。
芯片上电后,会从动跳到第一需要施行的指令,那么编译器和链接器是做了哪些工做才让第一条指令被放正在了准确的处所,
·架构设想:将营业代码从U-Boot中剥离,矫捷适配分歧U-boot版本、所有产物分歧平台分歧架构的分歧单板这种环境间接走挨次4,该号令的第一行设定了特殊符号“.”的值,里面能够列举放入该输出段的输入段。“.”值是计数器。正在输出段的名称后有一个花括号,接下来定义输出段“.text”。“*”是婚配任件名的通配符。顺着必定就是.efi_runtime段的第一个字节了。接下来是表达式“arch/arm/cpu/armv8/start.o(.text*)”暗示所有输入文件中的“.text”段的arch/arm/cpu/armv8/start.o。里面有一系列号令。此中SECTIONS该号令用于描述输出文件的内存结构,它后面跟开花括号中的一些列符号分派和输出段的描述。冒号是必需的格局。表达式“*(.__image_copy_start)”暗示所有输入文件中的所有“.__image_copy_start”输入段。若是不消其他体例指定输出段的地址,他起首是一个文本文件,计数器的值是0。
前面提到,能够利用ENTRY链接脚本号令设置入口点。其实链接器支撑多种体例设置入口点,会按照如下优先挨次测验考试设定入口点:
U-Boot施行的第一条指令用链接脚本中的术语叫做“入口点”。链接脚本中利用ENTRY号令来设置。参数是一个符号名称:ENTRY(symol),这里的符号就是_start。这里的“_start”是什么呢?就是0x0,查看体例如下:
闪光吧Linux:走进嵌入式Linux大门的第二步——建立最新u-boot进修9附和· 0评论文章
这里的链接器就是aarch64-linux-gnu-ld.bfd。链接脚本就是u-boot.lds,用“-T”号令行选项来指定。输入文件就是各个目次下编译好的build-in.o以及lib库。输出文件就是u-boot,通过“-o”号令行选项来指定。
正在计较机世界中,其实每一次链接过程都是由链接脚本节制的。那么什么是链接脚本呢?简单说就是由链接器号令言语书写的,给链接器看的,次要的目标是描述输入文件中的段(如text段、data段、bss段等)若何正在输出文件中拆卸,并节制输出文件的存储结构。
从头编译后,查看映照表不再是从“b reset”起头了,间接是“__arm_smccc_smc”函数: