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 ...
随机推荐
- Linux 下清空或删除大文件内容的 5 种方法
在 Linux 终端下处理文件时,有时我们想直接清空文件的内容但又不必使用任何 Linux 命令行编辑器 去打开这些文件.那怎样才能达到这个目的呢?在这篇文章中,我们将介绍几种借助一些实用的命令来清空 ...
- Bilateral Multi-Perspective Matching for Natural Language Sentences---读书笔记
自然语言句子的双向.多角度匹配,是来自IBM 2017 年的一篇文章.代码github地址:https://github.com/zhiguowang/BiMPM 摘要 这篇论文主要 ...
- ztree根据ztreeId【节点id】设置展开、选中、触发点击节点事件
有时候我们要默认选中某个节点,根据ztreeId // 这里的ztreeId就是ztree存放在页面的元素id,比如div的id // treeObj就是ztree对象 var treeObj = $ ...
- MongoDB使用过程中的报错处理(持续更新)
1.连接池问题 com.mongodb.DBPortPool$SemaphoresOut Concurrent requests for database connection have exceed ...
- org.springframework.http.converter.HttpMessageNotReadableException
发起请求报错:org.springframework.http.converter.HttpMessageNotReadableException 查看请求头: application/json 所以 ...
- Kubernetes---资源控制器之DaemonSet、Job和CronJob
⒈DaemonSet介绍,什么是DaemonSet DaemonSet 确保全部(或者一些)Node 上运行一个Pod的副本[注意主节点并不会参加调度].当有 Node 加入集群时,也会为他们新增一个 ...
- 网络编程之异步IO
Linux的I/O模型有下面几种:1. 同步阻塞I/O: 用户进程进行I/O操作,一直阻塞到I/O操作完成为止.2. 同步非阻塞I/O: 用户程序可以通过设置文件描述符的属性O_NONBLOCK,I/ ...
- Photon Server 实现注册与登录(四) --- 服务端响应登陆和注册
前面已经整理过了服务端代码,MyGameServer.cs 和 ClientPeer.cs 对请求和响应进行了拆分.接下来处理对前端的响应 一.响应登陆请求 之前整理中,响应前端请求主要在类Clien ...
- axios拦截器的介绍
interceptors 拦截器 拦截器一般做什么? 1. 修改请求头的一些配置项 2. 给请求的过程添加一些请求的图标 3. 给请求添加参数 拦截器的基本语法: 拦截器分为全局拦截器和局部拦截器 全 ...
- S02_CH01_Hello World实验
S02_CH01_Hello World实验 ZYNQ是一款SOC芯片,在前面第一季的学习当中,我们只是粗略的学习了ZYNQ的PL部分,对于ZYNQ最突出的功能,其内部的双核Cortex-A9内核并未 ...