首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

第3阶段——内核启动分析之make uImage编译内核(3)

其中,all就是直接 make 指令编译内核,显然make uImage和make都依赖于vmlinux(内核) 然后在746得到出vmlinux生成步骤: 746 vmlinux: $(vmlinux-lds...) $(vmlinux-init) $(vmlinux-main) $(kallsyms.o) FORCE 3.1.1 接下来分析顶层vmlinux依赖文件 可以看出vmlinux依赖于: vmlinux-lds...: 链接脚本 vmlinux-init: 初始化相关的代码 vmlinux-main:核心代码 kallsyms.o: 变量 这些依赖在顶层Makefile中608行处定义: 608 vmlinux-init...:= arch/$(SRCARCH)/kernel/vmlinux.lds // arch/arm/kernel/vmlinux.lds链接脚本 逐个分析: (1) vmlinux-lds...如上图, 主要通过arm-linux-ld连接选项,通过vmlinux.lds链接脚本对内存的地址设置,然后将 顶层vmlinux依赖文件分析出来的所有文件按一定顺序布局并输出vmlinux文件 (arm-linux-ld

1.3K60

第3阶段——内核启动分析之make uImage编译内核(3)

其中,all就是直接 make 指令编译内核,显然make uImage和make都依赖于vmlinux(内核) 然后在746得到出vmlinux生成步骤: 746 vmlinux: $(vmlinux-lds...) $(vmlinux-init) $(vmlinux-main) $(kallsyms.o) FORCE 3.1.1 接下来分析顶层vmlinux依赖文件 可以看出vmlinux依赖于: vmlinux-lds...: 链接脚本 vmlinux-init: 初始化相关的代码 vmlinux-main:核心代码 kallsyms.o: 变量 这些依赖在顶层Makefile中608行处定义: 608 vmlinux-init...:= arch/$(SRCARCH)/kernel/vmlinux.lds // arch/arm/kernel/vmlinux.lds链接脚本 逐个分析: (1) vmlinux-lds...如上图, 主要通过arm-linux-ld连接选项,通过vmlinux.lds链接脚本对内存的地址设置,然后将 顶层vmlinux依赖文件分析出来的所有文件按一定顺序布局并输出vmlinux文件  (arm-linux-ld

995100

一张图看懂linux内核中percpu变量的实现

从上图中我们可以看到,各种源文件中通过DEFINE_PER_CPU的方式,定义了很多percpu变量,这些变量根据vmlinux.lds.S中的相关定义,会被linker聚合在一起,然后放到最终vmlinux...linux内核在启动时,会先把vmlinux文件加载到内存中,然后根据cpu的个数,为每个cpu都分配一块用于存放percpu变量的内存区域,之后把vmlinux中的.data..percpu section...vmlinux.lds.S是一个链接脚本,在链接阶段,linker会根据vmlinux.lds.S里的定义,把相同section的内核变量或方法,聚合起来,放到最终输出文件vmlinux的对应section...另一个需要注意的是,__per_cpu_load的地址值是正常的内核编译地址,它用来指定,当vmlinux被加载到内存后,vmlinux里的.data..percpu section所处内存的位置: ?...另外,PERCPU_VADDR宏里还定义了三个地址值: __per_cpu_load表示当vmlinux被加载到内存时,vmlinux中的.data..percpu section所处内存位置。

1.7K21

使用 GDB + Qemu 调试 Linux 内核

bzImage 进行编译, -j N,表示使用多少核并行编译 # 未压缩的内核文件,这个在 gdb 的时候需要加载,用于读取 symbol 符号信息,由于包含调试信息所以比较大 $ ls -hl vmlinux...-rwxr-xr-x 1 root root 449M Feb 3 14:46 vmlinux # 压缩后的镜像文件 $ ls -hl ....uptime) seconds" # normal user setsid /bin/cttyhack setuidgid 1000 /bin/sh 到此为止我们已经编译了好了 Linux 内核(vmlinux...拷贝 Linux 编译的源码主要是在 gdb 的调试过程中查看源码,其中 vmlinux 和 linux 源码处于相同的目录,本例中 vmlinux 位于 linux-4.19.172 源目录中。...Project:选择我们刚才创建的项目名字; C/C++ Application:选择编译 Linux 内核带符号信息表的 vmlinux; Build before launching:选择 ”Disable

6.5K20
领券