一、linux内核的安装与加载
安装方法与步骤在linux内核的安装与加载教程中以详细讲解,请自行下载,这里讲解安装中遇到的知识。
1、uboot内核启动命令
启动指定内存地址上的Linux内核 并为内核传递参数
bootm kernel-addr ramdisk-addr dtb-addr
kernel-addr: 内核的下载地址
ramdisk-addr: 根文件系统的下载地址
dtb-addr: 设备树的下载地址
若不使用相应的地址,对应的位置写“-”
eg:
bootm 0x41000000 - 0x42000000
2、uboot自启动参数环境变量
设置传递给linux内核的参数
setenv bootargs root=/dev/nfs nfsroot=xxx.xxx.xxx.xxx:/opt/4412/rootfs rw console=ttySAC2,115200 init=/linuxrc ip=***.***.***.***
root 根文件系统类型(nfs)
nfsroot 网络文件系统路径(xxx.xxx.xxx.xxx:/opt/4412/rootfs)
rw 操作网络文件系统的权限(rw)
console 控制台(使用串口2,波特率115200)
init init进程的位置(/linuxrc)
ip linux启动后自身的IP(***.***.***.***)
二、交叉编译工具链
关于交叉编译工具在Ubuntu交叉编译安装教程中已有详细讲解,请自行下载安装,这里编译工具常用的命令,为之后学习内核作下铺垫。
1、编译原理
机器码(二进制) 是处理器能直接识别的语言 ,不同的机器码代表不同的运算指令,处理器能够识别哪些机器码是由处理器的硬件设计所决定的 ,不同的处理器机器码不同,所以机器码不可移植 汇编语言 是机器码的符号化,即汇编就是用一个符号来代替一条机器码 ,所以不同的处理器汇编也不一样,即汇编语言也不可移植 C语言 在编译时我们可以使用不同的编译器将C源码编译成不同架构处理器的汇编,所以C语言可以移植
2、GCC的编译过程
3、交叉编译与工具获取
概念:程序的编译和运行不在同一台机器上
交叉编译工具链
- 交叉编译工具链的获取:
- 官网获取(不推荐,需要自己进行复杂配置与编译)
http://ftp.gnu.org/gnu/gcc/ - BSP板级开发支持包(推荐)
samsung、全志… - 交叉编译工具链的内容
- 交叉编译工具
gcc、readelf、size、nm、strip、objcopy、objdump、addr2line - 库
ARM架构的库
4、ELF文件格式与BIN文件格式
4.1 ELF文件格式
ELF
- ELF格式是Linux平台上应用最广泛的二进制工业标准之一
- ELF格式的文件内包含了很多个段不同的段存储了不同的信息;因为
ELF格式的文件要通过Linux系统的加载和管理才能运行 ,所以除了最基本的代码段和数据段之外,其中还存储了很多其它的信息,如符号表、调试信息等
4.2 ELF文件相关命令
- file
file + 文件名 : 查看文件的详细信息
- readelf
readelf -h + 文件名 : 列出elf文件的头部信息 readelf -a + 文件名 : 列出elf文件的所有信息
4.3 BIN文件格式
BIN文件一般是直接运行在CPU之上的可执行文件 文件内只包含了CPU能够直接识别和运行的指令和数据,不包含其它系统相关的信息
5、交叉编译工具链常用工具
列出目标文件每一段的大小以及总体的大小 size + 文件名
列出 目标文件中的符号表 (标示符) nm + 文件名
丢弃 目标文件中的符号 strip + 文件名
到这里就结束啦!
|