sudo apt-get install build-essential
sudo apt-get install libncurses5
sudo apt-get install libncurses5-dev
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- xxx_defconfig//对应自己的defconfig文件
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
顶层 Kconfig 文件调用了很多其他子目录下的 Kcofig 文件,这些子目录下的 Kconfig 文件在主菜单中生成各自的菜单项。
Kconfig 文件的最终目的就是在.config 文件中生成以“CONFIG_”开头的变量。
1. Architecture select (ARM architecture) —> 处理器架构选择,单选
2. ARM architecture —> ARM 架构子选项
4.Boot images —> 镜像
5.Command line interface —> 命令行接口
6.Device Tree Control —> 设备树控制
7.Networking support —> 网络支持
9.File systems —> 文件系统
在顶层Kconfig,添加如下代码:
1 menu "My test menu"
2
3 config MY_TESTCONFIG
4 bool "This is my test config"
5 default y
6 help
7 This is a empty config, just for tset!
8
9 endmenu # my test menu
添加完成以后打开图形化配置界面
从Uboot更新Uboot、Kernel以及根文件系统
1)概述
对于CPU来说整个启动分两步,第一步是固化在芯片内部的引导,主要加载uboot.bin。这段固件应该要先判断uboot是在那个存储里面,拷贝完之后进行跳转,执行uboot.bin。第二阶段uboot.bin先初始化外设,然后初始化系统允许环境
2)初始化外设的代码
arch/arm/cpu/armv7/start.S
board/samsung/myboard/lowlevel_init.S
arch/arm/lib/crt0.S
arch/arm/lib/board.c
start.S
1、设置CPU为SVC模式,uboot需要更多的权限所以需要打开
2、关闭MMU,uboot操作的都是实际地址
3、关闭Cache,cache主要是做缓存的,因为内存的初始化比CPU初始化慢半拍,上电之初就操作存储可能会导致问题
4、跳转到lowerlevel_init.s low_level_init
lowlevel_init.S
5、初始化时钟
6、初始化内存
7、初始化串口,看门狗
8、跳转到crt0.S _main
crt0.S
9、设置栈
10、初始化C运行环境
11、调用board_init_f()
board.c
12、board_init_f对全局信息GD结构体进行填充
13、代码重定位
3)准备环境阶段
arch/arm/lib/crt0.S
arch/arm/lib/board.c
1. board_init_r()是进入定制板目录的入口common/main.c
2. main_loop()中关闭中断,执行命令以及加载引导内核
4)uboot是如何加载内核的
1.uboot需要先初始化好DRAM,因为要把内核搬运到这里面
2.初始化一个串口
3.uboot需要把板子类型传给内核,按照arch/arm/tools/mach-types中的描述,将板子编号存储在r1寄存器,这里板子类型有什么用?
4.建立内核参数,包含内存位置,内存大小及根文件系统的位置等
5.加载ramfs文件系统
6.启动内核镜像