移植u-boot学习笔记9-----u-boot裁剪和修改默认参数
来源:互联网 发布:开启dynamic qos网络 编辑:程序博客网 时间:2024/05/06 21:09
移植u-boot学习笔记9-----u-boot裁剪和修改默认参数http://blog.csdn.net/qingkongyeyue/article/details/52549175
1、u-boot中的环境变量
(1)
在u-boot中可以设置这些东西这些东西会在哪里,我们可以修改代码,让这些参数存在某个地方上。u-boot启动时,会首先读取参数,然后判断是否有效,有效就用,无效就用默认参数。默认参数在代码里面写死了。
(2)看启动信息出现bad CRC(校验码错误)
就是说我们没有在flash上面保存、设置参数。u-boot想去读的时候,里面的数据格式是不对的,就会出现bad CRC警告,就会使用默认的环镜变量
2、默认的环镜变量
(1)在哪里设置
在u-boot代码里搜索using default environment
在Env_common.c里面
里面的defaut_environment
这里bootargs是传给内核的参数,
(2)修改默认环镜变量
在include\configs\smdk2440.h中定义
规划nand flash,前面部分放bootloader,然后放参数,然后放内核,往后的地方放文件系统。
设置传给内核参数
console=ttySAC0表示内核打印信息从串口0输出出来。root=/dev/mtdblock3表示文件系统在第3个mtd块(共4个)。
(3)u-boot启动后如何启动内核
根据bootcmd这个环境变量,执行里面的命令启动内核。
从nand flash里面读,
3、裁剪u-boot
(1)输入help查看各种命令
(2)修改配置文件include\configs\smdk2440.h
去掉不必要的宏定义
(3)编译uboot时出现错误,只要修改相应文件对应目录下的Makefile,把此文件取消编译进内核。
(4)重新编译
销毁之前编译的目标
make distclean(编译时出错找不到原因就清除重新编译)
配置
make smdk2440_config
编译
make
4、重新划分区
(1)参考以前旧的内核,按照里面的分区来划。
设置单板和服务器IP还有Mac地址,用tftp下载uImage,然后启动uImage,看看里面的分区。按照内核里面的分区修改u-boot代码。
(2)启动内核,查看内核打印出来的分区
40000就是256K,参数在40000~60000
(3)在u-boot中找不到cmd_save.c文件,也找不到do_save函数。因而重启u-boot,看看save命令有什么帮助信息,根据帮助信息找到对应的文件,再根据哪些文件来确定用什么宏。
在u-boot中查找saveenv,看Env_nand.c(对于nand flash)和Env_flash.c(对于nor flash),我们要编译 这个文件,看看common目录里面它的Makefile,根据Makefile来确定一下Env_flash.c这个文件依赖于什么宏。
查看common目录下的MakefileEnv_flash.c这个文件依赖于宏CONFIG_ENV_IS_IN_NAND
所以要定义CONFIG_ENV_IS_IN_NAND这个宏
在include\configs\smdk2440.h中定义
想存在哪里(想存在0x40000哪里),可用偏移地址宏CONFIG_ENV_OFFSET,
选择0x20000的要求:nand flash一个块的大小必须是整块128K,所以取值需要时128K的整数倍,nand flash是以块为单位擦出的
而大小用宏CONFIG_ENV_SIZE定义为0x20000(60000-40000)
(5)存在nand flash的哪里,进env_nand.c这个文件看看
nand_erase_options.length是nand flash的擦除参数length,也就是说我们设置参数时要先擦除nand flash,擦除CONFIG_ENV_RANGE这么长,如果擦除的长度小于环境变量参数的大小就返回错误。因而宏CONFIG_ENV_RANGE需要设置为大于或等于CONFIG_ENV_SIZE
5、实验
(1)设置参数并烧写、重启
reset
(2)打印参数信息
(3)保存设置的参数(save命令)
(4)用tftp下载并烧写内核到nand flash里(根据之前的分区,下载2M到60000里面去),需要先擦除nand flash
(5)上面总是用到地址和大小的数值,相当麻烦,修改u-boot,用某些名字代替
在u-boot中搜索mtdpart
我们在u-boot写的这些所谓的分区,只不过是为了方便我们使用,吧某些数值用某个名字代替而已。划分分区要根据内核来,U-boot做的这些所谓的分区只不过是在代码里面写的一些东西,方便我们查看使用而已,不会对内核有任何影响,所划的分区不会传到内核里面去。
查看Cmd_mtdparts.c在common目录下,查看common目录下的Makefile,搜索mtdparts
我们要定义宏CONFIG_CMD_MTDPARTS,Cmd_mtdparts.c才会编译进u-boot,u-boot才会支持mtdpart这个命令。
在配置文件include\configs\smdk2440.h中定义宏
(6)分区如何划分(在cmd_mtdparts.c文件里)
mtdparts_init()函数没有被别的程序调用,因而在board.c里面调用此函数。
(不想分析代码就模仿别人怎么设置)
在配置文件include\configs\smdk2440.h中定义
这里减号代表剩下的所有,宏CONFIG_MTD_DEVICE在下面会提及
(7)编译并解决错误
说get_mtd_device_nm没有定义,而这个函数在drivers\mtd\Mtdcore.c中定义,可能文件Mtdcore.c没有被编译进u-boot,查看所在目录的Makefile,搜索core
知道要Mtdcore.c被编译进u-boot,需要定义宏CONFIG_MTD_DEVICE
6、实验2
(1)用tftp命令下载u-boot到SDRSM
(2)去除nor flash的写保护,并擦除256K,从SDRAM 中拷贝到nor flash的0地址处并用reset命令重启。
(3)用mtdpart命令查看分区
(4)下载内核、烧写内核(用名字代替数值)
参考下面名字对应数值
先要用mtdparts default命令设置默认分区,再来擦除。
烧写
(5)不想手工执行命令mtdparts default
在代码里让他执行,在board.c中执行run_command函数,左边的参数是命令,右面的参数可以随便写。
(6)修改bootcmd
在include\configs\smdk2440.h中修改
在u-boot中修改bootcmd参数保存并重启,用print命令查看
- 移植u-boot学习笔记9-----u-boot裁剪和修改默认参数
- 移植u-boot学习笔记9-----u-boot裁剪和修改默认参数
- u-boot-2016.05移植:(6)、修改默认参数
- u-boot移植--6、修改默认配置参数
- 06-S3C2440学习之移植2012u-boot到S3C2440(移植过程五--最终)裁剪+修改默认参数+分区设置+支持文件系统下载
- u-boot移植笔记
- 移植u-boot-2015.07-rc3之uboot裁剪及启动参数修改(九)
- u-boot-2016.01移植笔记之对u-boot的裁剪以及配置环境变量
- 移植u-boot-2012.04----修改默认参数、烧写yaffs文件
- s3c2416 U-Boot移植笔记
- smdk2440移植u-boot笔记
- 学习驱动:移植u-boot
- u-boot裁剪
- u-boot 裁剪分析
- 裁剪U-boot
- TQ2440 学习笔记—— 32、移植U-Boot【U-Boot 的移植】
- DM368 UBL和u-boot的裁剪
- DM368 UBL和u-boot的裁剪 .
- NSURLSession与NSURLConnection的前仆后继
- java 正则表达式验证
- 剑指offer第30题(连续子数组的最大和)
- 虚拟菱形继承
- GCC 编译使用动态链接库和静态链接库的方法
- 移植u-boot学习笔记9-----u-boot裁剪和修改默认参数
- XCode报错 "_BZ2_bzRead", referenced from
- 用python完成简易名字管理系统
- http接口毫秒级别重复提交导致数据不一致
- 招聘心得,送给正在找工作的朋友(求职者必看)
- 《Linux网络编程》学习笔记(1)——Linux网络开发基础:Linux操作系统概述
- sparksql 操作hive
- Aurora HDR 2018(图片HDR特效工具)官方破解版V2018.1.1.1.941下载 | Aurora HDR 2018破解版
- 如何将谷歌地图导出为百度瓦片