课堂记录

发布于 2021-04-02  1.62k 次阅读


典型的flash存储空间分配

bootloader+启动参数+内核+根文件系统

U-boot

stage1(汇编)和stage2(C语言)两大部分
(1)硬件设备初始化
(2)为加载引导系统的stage2准备ram空间
。。。
引导系统的stage2:
。。。
(5)调用内核
。。。

vivi

arm架构的bootloader

  • vivi命令。。

4.1.2 C语言编译过程

.c→预处理.I→(汇编) *.s→(编译)→*.o→(link) exe
gcc:包含预处理,编译器、汇编器、连接器等组件
预处理:对源程序中的预处理命令和特殊符号进行预处理。
gcc -E x.c -o x.i
gcc -I /usr/openwin/include file.c
gcc -D DOPTION"test -D" testd.c

  1. 编译
    gcc -S test1.i

    4.1.3 gcc 编译器

    • 目标代码👉执行代码
    • 源文件👉执行代码
      -o file1 file2 将文件file2编译成可执行文件file1

      优化编译器

      -O1
      -O2
      -O3
      time X.c时间复杂度

    • 链接(linking):将目标代码与各库函数进行链接并重定位,生成可执行程序
    • 函数库

静态库
动态库,共享库。
objdump -d -s//查看2进制文件

4.2.1 gdb调试器简介

  • gdb
    可以使程序开发者在程序运行时观察程序的内部结构。
  • gdb所提供的功能
  • 设置断点
  • 监视、修改变量
  • 单步执行
  • 显示/修改寄存器的值
  • 查看堆栈
  • 远程调试
  • 利用gdb调试的前提
    在程序的使用过程中,使用-g选项,生成gdb工作所必须的调试信息;
    gcc -g -o test test.c
    启动gdb的方法
  • gdb(进入环境)
  • gdb filename
    说明:filename是可执行文件,而不是源代码文件
    r(run)
    n(单步执行)
    p
    通过时间戳检验改变
    GUNmakefile
    makefile
    Makefile

擦肩而过的概率