u-boot移植易用性设置
u-boot移植易用性设置
以下设置使用的u-boot版本为u-boot-2012.04.01
环境参数
在Flash上划分了一块区域用于存储环境变量,所以当u-boot启动时会有如下操作:
- 读取Flash上的环境变量;
- 判断读取到的环境变量是否有效;
- 如果判断有效则用,无效则使用默认参数;
当还没有在Flash上设置环境变量时,u-boot在启动的时候会打印出 Warning - bad CRC, using default environment,以下是如何设置默认参数(在Nand上区域的划分依次是:bootloader(0)、params(1)、kernel(2)、rootfs(3)):
/* 内核打印信息从串口0打印输出,文件系统在第3个分区 */
#define CONFIG_BOOTARGS "console=ttySAC0 root=/dev/mtdblock3"
/* 根据此命令读出内核并启动内核
* 使用nand read 命令从0x60000地址处读取大小为0x200000(2M)数据,读到0x30000000处
* 从30000000地址处启动内核
*/
#define CONFIG_BOOTCOMMAND "nand read 30000000 60000 200000;bootm 30000000"
/* 网络相关的设置 */
#define CONFIG_ETHADDR 00:0C:29:26:0a:5b
#define CONFIG_NETMASK 255.255.255.0
#define CONFIG_IPADDR 192.168.3.10
#define CONFIG_SERVERIP 192.168.3.6
此时还不能在u-boot命令模式中使用save命令保存环境变量,因为在代码中还没有修改代码(划分环境变量分区),如果使用有可能会破坏Flash中的内容;
设置时可以参考如下分区设置:
Creating 4 MTD partitions on "NAND 256MiB 3,3V 8-bit":
0x00000000-0x00040000 : "bootloader"(256k)
0x00040000-0x00060000 : "params"(128k)
0x00060000-0x00260000 : "kernel"(2M)
0x00260000-0x10000000 : "root"
设置环境变量(可参考save命令,判断如何设置):
/* 可以认为此宏定义后,环境变量存储在Nand上 */
#define CONFIG_ENV_IS_IN_NAND
/* 存储偏移地址,即存储的起始地址在哪(参考上面的分区划分) */
#define CONFIG_ENV_OFFSET 0x00040000
/* 存储的空间大小设置(参考上面的分区划分)
* 空间大小值得设置是有要求得,必须时所使用的Nandflash块大小的整数倍(因为Nand是以块为单位擦除* 的)
*/
#define CONFIG_ENV_SIZE 0x20000
#define CONFIG_ENV_RANGE CONFIG_ENV_SIZE /* 使用前擦除的范围,设置为同SIZE即可 */
u-boot代码按照上述修改后,重新编译烧写运行后,会出现启动倒数并且还会出现Warning - bad CRC, using default environment提示,是因为环境变量参数还未保存在Flash中,此时使用save命令保存下即可,重启发现已没有该提示信息;
程序烧写相关操作命令的使用
烧写程序到Norflash中的操作示例
loady 30000000 /* 使用loady命令,按照ymodem协议将程序发送到30000000地址处,即内存中 */
protect off all /* 解锁Flash的写保护 */
erase 0 7ffff /* 从Nor的0地址开始擦除,擦除的大小为0x80000(512k) */
cp.b 30000000 0 80000 /* 从30000000地址处,按照byte拷贝程序到Nor的0地址处,拷贝大小为 0x80000(512k) */
烧写程序到Nandflash中的操作示例
tftp 30000000 uImage /* 通过tftp服务下载内核镜像到30000000地址处 */
nand erase 60000 200000 /* 擦除Nand从0x60000地址处开始,大小为0x200000(2M) */
nand write 30000000 60000 200000 /* 将内存地址30000000处开始的代码写到Nand中起始地址为0x60000处,大小为2M */
分区划分及定义
上述的示例操作比较麻烦,可以用某些名字来代替数字(比如要写入的起始地址等);
可以使用mtd或者mtdparts命令操作
u-boot中的分区只是在代码中通过定义宏定义的方式实现,用一些名字替代上述示例操作中的某些数字,便于使用,并不会对内核有任何影响,并不会出入到内核中去,也并无其他任何作用;
操作方法:
- 首先确保有运行如下操作;
run_command("mtdparts default", 0); /* 运行后才会初始化默认分区表 */
- 通过宏定义确定默认分区表:
#define CONFIG_CMD_MTDPARTS /* 包含使用mtdparts命令 */
#define MTDIDS_DEFAULT "nand0=jz2440-0" /* 哪一个设备 */
#define MTDPARTS_DEFAULT "mtdparts=jz2440-0:256k(u-boot)," \
"128k(params)," \
"2m(kernel)," \
"-(rootfs)" /* 剩下空间默认都属于文件系统 */
在设置完分区表后,上述的烧写程序示例操作可以修改为如下(按照上面的分区设置):
tftp 30000000 uImage /* 通过tftp服务下载内核镜像到30000000地址处 */
nand erase.part kernel /* 擦除Nand从0x60000地址处开始,大小为0x200000(2M) */
nand write 30000000 kernel /* 将内存地址30000000处开始的代码写到Nand中起始地址为0x60000处,大小为2M */
BOOTCOMMAND命令可以修改如下:
/* 根据此命令读出内核并启动内核
* 使用nand read 命令从0x60000地址处读取大小为0x200000(2M)数据,读到0x30000000处
* 从30000000地址处启动内核
*/
#define CONFIG_BOOTCOMMAND "nand read 30000000 kernel;bootm 30000000"
u-boot移植易用性设置的更多相关文章
- 自定义的Spring Boot starter如何设置自动配置注解
本文首发于个人网站: 在Spring Boot实战之定制自己的starter一文最后提到,触发Spring Boot的配置过程有两种方法: spring.factories:由Spring Boot触 ...
- [Java] Spring boot 的maven设置阿里云仓库
Spring boot 的maven设置阿里云仓库 打开根目录下的 pom.xml 文件,在对应为止出加入如下 红色 代码: <build> <plugins> <plu ...
- 标题:u-boot 移植步骤详解
1 U-Boot简介U-Boot,全称Universal Boot Loader,是遵循GPL条款的开放源码项目.从FADSROM.8xxROM.PPCBOOT逐步发展演化而来.其源码目录.编译形式与 ...
- spring boot跨域设置
定义 跨域是指从一个域名的网页去请求另一个域名的资源 跨域背景 限制原因 如果一个网页可以随意地访问另外一个网站的资源,那么就有可能在客户完全不知情的情况下出现安全问题 为什么要跨域 公司内部有多个不 ...
- CMake根据平台移植检查设置文件编译选项
#添加函数检查功能 include(CheckFunctionExists) //检查系统是否支持accpet4,将检查结果设置至HAVE_ACCEPT4 check_function_exists( ...
- -boot移植(十一)---代码修改---支持nandflash
一.移植前的修改 1.1 include/configs/jz2440修改 原来的定义: 可以看出,要先定义CONFIG_CMD_NAND才能使能NANDFlash. 这个在我们文件中的82行有定义, ...
- Spring Boot 2.0 设置网站默认首页
Spring Boot设置默认首页,方法实验OK如下 附上Application启动代码 /** * @ClassName Application * @Description Spring-Boot ...
- spring boot 的maven设置阿里云仓库
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> ...
- Spring Boot全日志设置
说在前面 这里日志分两种.一种是tomcat的输出(系统)日志,一种是自己定义的日志. 系统日志设置 目标 当springboot接收到请求时记录日志到文件中 实现 你只需要在你的绿叶applicat ...
随机推荐
- souce and bash 的区别
对于一些环境变量的配置文件,如想使更改后立即生效,多用 souce +file 执行后即可.如/etc/profile 里加了配置, source 和 bash 的区别: source filena ...
- 【Python】机器学习之单变量线性回归 利用批量梯度下降找到合适的参数值
[Python]机器学习之单变量线性回归 利用批量梯度下降找到合适的参数值 本题目来自吴恩达机器学习视频. 题目: 你是一个餐厅的老板,你想在其他城市开分店,所以你得到了一些数据(数据在本文最下方), ...
- 洛谷 题解 P1133 【教主的花园】
$n<=10^5 $ O(n)算法 状态 dp[i][j][k]表示在第i个位置,种j*10的高度的树,且这棵树是否比相邻两棵树高 转移 dp[i][1][0]=max(dp[i-1][2][1 ...
- centOS服务器-firewall防火墙开放端口
前言 日常开发中,我们常常会因为服务器各种端口未开放出现各种问题,下面我们就来简单了解下服务器上的端口开放!!! 作为一个后台开发,日常接触最多的除了代码就是服务器了: 产品:谁谁, 线上有个功能报错 ...
- [转帖]ECC公钥格式详解
ECC公钥格式详解 https://www.cnblogs.com/xinzhao/p/8963724.html 本文首先介绍公钥格式相关的若干概念/技术,随后以示例的方式剖析DER格式的ECC公钥, ...
- SQL SERVER 使用游标删除所有主键
Declare @Pk varChar(100);Declare @TBname varChar(100);declare cursor1 cursor for Select Sys2.name as ...
- 剑指offer42:数组和一个数字S,输出两个数的乘积最小的
1 题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输出描述: 对应每个测试案例,输出两个数,小的先输出. ...
- MGR+Consul集群
[root@mydb1 ~]# wget https://releases.hashicorp.com/consul/1.4.0/consul_1.4.0_linux_amd64.zip[root@m ...
- 怎样通过html标签名获取元素节点集合
方法1. 使用document.querySelectorAll(); 方法2. 使用document.getElementsByTagName(); document.querySelectorAl ...
- Jersey 写restful接口时QueryParam ,FormParam 等的区别
今天用jersey写接口,发现有一个post方法中没有得到参数,查了半天发现自己一不小心将@formparam写成了@queryparam,真是一个悲伤的故事.在这里把几个参数类型整理了一下放出来. ...