嵌入式 hi3518c裸板uboot烧写、kernel烧写、fs烧写小结
1、在uboot中我可以添加自己的命令,添加的方法是找到一个uboot的命令,然后模仿着去增加属于自己的命令代码以及实现函数就可以
2、记住在使用printf进行调试的时候,在遇到指针或者字符串的时候最好使用“%x”,以为我不知道指针或者字符串中是否包含不可见字符,如果有不可见字符会导致错误,而且错误不好查找
3、对于uboot中的环境变量,其实是放在uboot里面的,也就是环境变量占用的是uboot的空间,如果不需要去实时修改环境变量的值那么就可以不用env这个分区;但是如果需要修改环境变量,那么首先需要知道saveenv的起始地址和大小,来防止env的保存会覆盖flash中其他的有用数据。具体运行saveenv就可以看到起始地址和env大小
4、有时候在烧写完成kernel的时候直接第一次reset是可以启动的,但是当断电然后再一次上电的时候可能就会出现错误,例如:
Resetting CPU ...
这就有可能是内核不完整了,说明前面的操作可能覆盖了内核的部分内容导致的
5、对flash(spi)串行flash进行分区的时候需要特别注意:
1):uboot对flash分区可能存在明显的代码分区列表可以直接进行修改
2):uboot中没有这个明显的代码的时候,可能是在uboot的env中传过去的
setenv bootargs mem=64Mconsole=ttyAMA0,115200 root=/dev/mtdblock4 rootfstype=jffs2mtdparts=hi_sfc:256k(boot)ro,128k(env),128k(config),3072k(kernel),11264k(rootfs)
具体是哪种方式可以去uboot源码中进行查找函数的入口参数的传入点
6、分区的具体信息需要根据uboot的大小(每一分区的大小最小是一个扇区,包括kernel和rootfs)
0x000000000000-0x000000040000 :"boot"
0x000000040000-0x000000060000 : "env"
0x000000060000-0x000000080000 : "conf"
0x000000080000-0x000000380000 : "kernel"
0x000000380000-0x000000e80000 : "rootfs"
7、uboot对flash分区具有最大上限一般为(32)
在使用jlink烧写之前必须对cpu进行初始化,然后进去normal模式,接着进行内存初始化,然后才能烧写
hi3518c初始化命令:
setmem 0x20030000 0x11000000 32
setmem 0x20030004 0x0068306E 32
setmem 0x20030008 0x12000000 32
setmem 0x2003000c 0x007C2063 32
setmem 0x20030010 0x19000000 32
setmem 0x20030014 0x00682064 32
setmem 0x20030020 0x1B000000 32
setmem 0x20030024 0x007C40E1 32
setmem 0x20030028 0x00000010 32
setmem 0x2011001c 0x80000600 32
setmem 0x20030028 0x00000410 32
setmem 0x2011001c 0x80000600 32
setmem 0x20050014 0x0fff8000 32
setmem 0x2011001c 0x80000600 32
setmem 0x20050000 0x00000214 32
setmem 0x2011001c 0x80000600 32
setmem 0x2011001c 0x80000600 32
setmem 0x20110020 0x00000785 32
setmem 0x20110058 0x3240a000 32
setmem 0x20110010 0x00000001 32
setmem 0x2011002c 0x00000122 32
setmem 0x20110040 0x80000000 32
setmem 0x20110050 0x62330a08 32
setmem 0x20110054 0xff626720 32
setmem 0x2011005c 0xffcff5f2 32
setmem 0x201100ac 0x03000001 32
setmem 0x2011001c 0x80000600 32
setmem 0x201100f4 0x00000001 32
setmem 0x20110004 0x00000000 32
setmem 0x2011001c 0x80000600 32
setmem 0x20120404 0x80000000 32
setmem 0x2011001c 0x80000600 32
setmem 0x20120408 0x01842200 32
setmem 0x20120418 0x00220055 32
setmem 0x2012041c 0x048b0d41 32
setmem 0x20120420 0x03233881 32
setmem 0x2012042c 0xf200001e 32
setmem 0x20120434 0x288f6693 32
setmem 0x20120438 0x0040009b 32
setmem 0x2012043c 0x1001aa00 32
setmem 0x20120584 0x0000006d 32
setmem 0x20120440 0x00001730 32
setmem 0x20120444 0x00000006 32
setmem 0x20120448 0x00000008 32
setmem 0x2011001c 0x80000600 32
setmem 0x201205c0 0x00000e81 32
setmem 0x20120600 0x00000e81 32
setmem 0x2011001c 0x80000600 32
setmem 0x20120404 0x000000ff 32
setmem 0x2011001c 0x80000600 32
setmem 0x20110058 0x3240a062 32
setmem 0x20120408 0x01842200 32
注:其中每一空白行的前一行setmem 0x2011001c 0x8000060032是为了实现wait操作
1、在裸板上使用jlink进行烧写uboot的需要知道uboot在内存中的运行地址也就是代码段的入口,可以去uboot源码下找到uboot.map进行查找text入口。
2、然后在串口中进行loadb 0x82000000(uboot中也是可以找到定义的),然后sfwrite到flash但是需要先擦除后烧写
3、有时候在烧写uboot之后saveenv后reset找不到内核,并提示wrong format image这可能是内核的头没了,原因是saveenv的时候覆盖了内核的文件,所以需要去uboot中找到类似下面的代码:
#defineCFG_ENV_ADDR 0x80000
#defineCFG_ENV_SIZE 0x2000
然后对flash分区进行重新计算
4、对flash分区3.0内核和uboot 2006中是使用环境变量进行划分的,类似代码如下:
setenv bootargs 'mem=64M console=ttyAMA0,115200root=/dev/mtdblock4 rootfstype=jffs2mtdparts=hi_sfc:256k(boot)ro,128k(env),128k(conf),2944k(os),12800k(rootfs)'
注:speed 1000 后使用AXD进行cpu和ram 初始化
sf probe 0;mw.b 0x82000000 ff 0x80000;
烧录uboot:
loadb 0x82000000
sf probe 0;sf erase 0x0 0x80000;sf write0x82000000 0x0 0x80000
烧录内核:
sf probe0;mw.b 82000000 ff 300000;loadb 0x82000000;sf erase c0000 300000;sfwrite 82000000 c0000 300000
//mw.b表示按字节显示 mw: 对RAM中的内容写操作,mw 32000000 ff 10000(把内存0x32000000开始的0x10000字节设为0xFF)
烧录文件系统:
sf probe 0;mw.b 82000000 ff C80000 ;loadb 0x82000000;sf erase 3c0000 C80000;sf write 82000000 3c0000 C80000
官方uboot_env:
bootargs=mem=64M console=ttyAMA0,115200
bootcmd=bootm 0x82000000
bootdelay=1
baudrate=115200
ethaddr=00:00:23:34:45:66
ipaddr=192.168.1.10
serverip=192.168.1.2
netmask=255.255.255.0
bootfile="uImage"
stdin=serial
stdout=serial
stderr=serial
verify=n
ver=U-Boot 2010.06 (Dec 12 2012 - 13:16:58)
Environment size: 294/262140 bytes
hi3518_qy;
sf probe 0;mw.b 0x82000000 ff 0x80000;
烧录uboot:
loadb 0x82000000
sf probe 0;sf erase 0x0 0x80000;sf write0x82000000 0x0 0x80000
烧录内核:
sf probe0;mw.b 82000000 ff 300000;loadb 0x82000000;sf erase c0000 300000;sfwrite 82000000 c0000 300000
//mw.b表示按字节显示 mw: 对RAM中的内容写操作,mw 32000000 ff 10000(把内存0x32000000开始的0x10000字节设为0xFF)
烧录文件系统:
sf probe 0;mw.b 82000000 ff C80000 ;loadb 0x82000000;sf erase 3c0000 C80000;sf write 82000000 3c0000 C80000
setenv bootargs 'mem=64M console=ttyAMA0,115200root=/dev/mtdblock4 rootfstype=jffs2mtdparts=hi_sfc:256k(boot)ro,128k(env),128k(conf),2944k(os),12800k(rootfs)'
内核:
setenv bootcmd sf probe 0\;sf read 0x82000000 0xc00000x300000\;bootm 0x82000000
剩余:
256k未使用
嵌入式 hi3518c裸板uboot烧写、kernel烧写、fs烧写小结的更多相关文章
- HI3518E用J-link烧写裸板fastboot u-boot流程
Hi3518E的裸板烧写fastboot是不能像HI3531那样,可以通过FB直接烧写.遵循ARM9的烧写流程.其中一般u-boot的烧写流程可分为几类:第一:通过编程器芯片直接烧写:第二通过RVDS ...
- JZ2440裸板烧写(打补丁)
制作uImage,需要上网下载内核+patch补丁 1.将内核用ftp发送到 打补丁patch -p1 < ../补丁文件名 打补丁文件(目录) 2.配置 :复制cp configuratio ...
- 【嵌入式开发】 嵌入式开发工具简介 (裸板调试示例 | 交叉工具链 | Makefile | 链接器脚本 | eclipse JLink 调试环境)
作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42239705 参考博客 : [嵌入式开发]嵌入式 开发环境 (远 ...
- uboot-tiny4412启动流程(下)----如何将自己的裸板测试程序加入uboot中启动测试
今天在工作上搞了一天高通的芯片uboot程序,目的是希望将一个裸板的程序移植到uboot中,并且开机让它运行.这个芯片是NXP4330,目前是高通的一个芯片,基于ARM-contexA9架构,那么就跟 ...
- S5PV210裸板驱动:启动
以往2440和6410的启动方式,只要我们把裸板代码烧写到NAND FLASH的开始位置,当开发板上点启动时,处理器会自动从NAND FLASH上拷贝前面一段的代码到内部的RAM中执行.按照以前的方法 ...
- 学习嵌入式为什么要有uboot(深度解析)
ref:http://www.elecfans.com/d/617674.html 为什么要有uboot 1.1.计算机系统的主要部件 (1)计算机系统就是以CPU为核心来运行的系统. 典型的 ...
- 嵌入式Linux开发板
嵌入式Linux开发板开发介绍: iTOP-4412嵌入式Linux开发板搭载三星Exynos四核处理器,配备1GB内存,4GB固态硬盘EMMC存储,独家配备三星S5M8767电源管理,配备Andro ...
- 关于在arm裸板编程时使用printf问题的解决方法
在ARM裸板驱动编程中,是不允许程序直接调用C库程序的.为什么呢?因为此时kernel还没有被加载,所以在封装在kernel层的C库的API是用不了的,那怎么办? 在开发过程中,printf的功能我不 ...
- [转载非常好的文章]JLink+GDBServer调试S3C6410裸板的初始化代码 For OK6410开发板
要调试裸板,有两种初始化方法,一个是用烧好的uboot初始化,再有就是直接用JLink+GDBServer初始化.代码参考了网上的资料,根据手头的OK6410开发板做了修改.整体代码如下: # Con ...
随机推荐
- Sublime Text 3的快捷键
Sublime Text 3是一个非常了不起的软件,它不仅具有令人难以置信的内置功能(多行编辑和VIM模式),而且还支持插件.代码片段和其它许多东西. 今天,我们来总结一下Sublime Text 3 ...
- C# partial 说明
1. 什么是局部类型? C# 2.0 引入了局部类型的概念.局部类型允许我们将一个类.结构或接口分成几个部分,分别实现在几个不同的.cs文件中. 局部类型适用于以下情况: (1) 类型特别大,不宜放在 ...
- input效果:当鼠标在input中输入文字是改变内部文字效果
主要用到属性:onpropertychange事件(属性改变时触发的事件),oninput属性(当input有输入时发生的事件) onpropertychange事件是IE专属事件 oninput属性 ...
- jquery全选,jquery全不选,jquery反选
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Linux是一门真正的黑客高手艺术
黑客这个词从诞生到现在,从来就没有解释为“高级入侵者”.“病毒制造者”或者“QQ盗号者”过.我至今不清楚在中国是谁先把黑客和这些无聊的词汇联系在了一起,导致如此多的人被误导.但有一点是肯定的,不负责任 ...
- Linux下简易蜂鸣器驱动代码及测试实例
驱动代码: #include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> ...
- Python基于比较的排序
排序是算法学习中最基本的问题. 1.平均时间复杂度均为O(N2)的排序 1.1 插入排序 插入排序对少量元素的排序非常有效.工作机制就像打牌一样,为了将牌插入到已排好序的牌中,需要将牌与手中的牌从右向 ...
- Nginx+uWSGI+bottle 在Linux上部署
在/data/lujianxing/bottle 文件夹中创建三个文件: bottle.py bottle的源文件 a.py from bottle import Bottle, run mybott ...
- 通过xib文件创建和连接UIView
使用Xcode写程序,时间长了,对于界面上的元素,很多时候不想手写代码进行构建,但是有些UIView里面的子控件,又不能通过xib直接进行构造,要是总使用UIViewController来结合xib进 ...
- 获取iOS设备型号的方法总结
三种常用的办法获取iOS设备的型号: 1. [UIDevice currentDevice].model (推荐): 2. uname(struct utsname *name) ,使用此函数需要#i ...