一、 问题抛出 在KEIL同一个工程只能有一个main函数,因此这个决定了我们的bootloader 和 app 程序肯定不可能一次编译生成。(当然我个人感觉这里是可以一次生成的,只是我们的链接脚本 和 makefile 需要比较精通)但是在linux中我们通常是把uboot 放在 norflash ...
分类:
移动开发 时间:
2021-04-02 13:40:28
阅读次数:
0
1.UBOOT 运行的第一个文件是:cpu/arm920t/start.S(从程序的链接脚本中知道) 1 .globl _start // .globl定义一个全局符号"_start" 2 _start: b reset // 系统复位设置 3 ldr pc, _undefined_instruct ...
分类:
其他好文 时间:
2020-05-10 19:03:40
阅读次数:
67
kernel启动分析kernel启动代码kernel启动分析一、链接脚本二、head.S1.汇编阶段内核运行的虚拟地址与物理地址重要注释设置CPU工作模式汇编阶段__lookup_processor_type__lookup_machine_type__vet_atags__create_page_... ...
分类:
其他好文 时间:
2020-02-28 22:51:12
阅读次数:
102
main.c int enable; int test = 1; int main() { int temp; return 0; } int add() { return 0; } View Code elf反汇编结果如下,可以看出main函数中的栈多开了8字节,虽然局部变量只是int,占4字节( ...
分类:
其他好文 时间:
2020-02-09 20:18:16
阅读次数:
65
main.c int enable; int test = 1; int main() { return 0; } int add() { return 0; } View Code bss段在elf中虽然size是4,但并不占filesize,节头表如下图所示 程序头中,项目2的文件大小为4(4字 ...
分类:
其他好文 时间:
2020-02-09 20:06:52
阅读次数:
65
main.c int main() { return 0; } int add() { return 0; } View Code main.o的比较,与之二相比,section header offset由0x90变为0xA4,增加0x14,即add函数的大小 需要注意的是,后面section h ...
分类:
其他好文 时间:
2020-02-09 18:32:24
阅读次数:
86
main.c int main() { return 0; } View Code 编译:sparc-elf-gcc.exe -c main.c -o main.o 链接:sparc-elf-ld.exe main.o -nostartfiles -script=linkerscript.ld -o ...
分类:
其他好文 时间:
2020-02-09 18:26:10
阅读次数:
85
代码重定位(2.编程实现代码重定位) 1.引入链接脚本 我们上一节讲述了为什么要重定位代码,那么怎么去重定位代码呢? 上一节我们发现"arm linux ld Ttext 0 Tdata 0x30000000"这种方式编译出来的bin文件有800多M,这肯定是不行的,那么需要怎么把.data段重定位 ...
分类:
其他好文 时间:
2019-12-15 12:22:19
阅读次数:
126
基于samsung的Exynos 4412 从链接脚本u boot.lds中我们知道u boot是从start.s这个汇编文件开始的,所以u boot启动的第一阶段肯定也是从这里开始的,这个文件在cpu/arm_cortexa9/文件夹下,下面我们依照这个文件一步一步分析u boot启动的第一阶段。 ...
分类:
其他好文 时间:
2019-12-11 13:33:28
阅读次数:
155
内核初步 在这节教程, 我们将深入研究一些汇编程序, 学习创建链接脚本的基础知识以及使用它的原因。最后, 我们将学习如何使用batch(批处理)文件自动汇编、编译和链接这个最基本的受保护模式下的内核。本教程假定你已经安装了NASM和GCC, 并且了解一点点x86汇编语言。 内 ...
分类:
其他好文 时间:
2019-09-16 21:30:34
阅读次数:
112