imx6ul evk板子 QSPI nor启动记录(3) 启动qspi nor 系统
来源:互联网 发布:什么是淘宝号 编辑:程序博客网 时间:2024/06/15 18:21
Initramfs 已经制作好了,通过sf指令将相关文件烧到正确的nor位置 就可以正常启动系统了
通过分析 ucl2.xml中关于Quad Nor Flash的项,可以发现mfgtool需要将QSPI header
即CMD state="Updater" type="push" body="send" file="files/qspi-nor-micron-n25q256a-config">Sending QSPI config file</CMD>转换为hex烧录到nor的1k开始的位置
并且将uboot烧到4K的位置
<CMD state="Updater" type="push" body="$ dd if=$FILE of=/dev/mtd0 bs=1k seek=4" ifdev="MX6SX MX6UL">write U-Boot to NOR flash</CMD>
这就需要我们先用 mfg工具将QSPI header下载到nor,然后在进行我们的操作。通过mfg工具烧录nor过程省略。
下面是我的ucl2.xml文件 我已经将需要用到的文件写死了
<LIST name="Quad Nor Flash" desc="Choose Quad Nor flash as media">
<CMD state="BootStrap" type="boot" body="BootStrap" file ="firmware/u-boot-imx6ulevk_qspi1.imx" ifdev="MX6UL">Loading U-boot</CMD>
<CMD state="BootStrap" type="load" file="firmware/zImage" address="0x80800000"
loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6SL MX6SX MX7D MX6UL">Loading Kernel.</CMD>
<CMD state="BootStrap" type="load" file="firmware/%initramfs%" address="0x83800000"
loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6SL MX6SX MX7D MX6UL">Loading Initramfs.</CMD>
<CMD state="BootStrap" type="load" file="firmware/zImage-imx6ul-14x14-evk.dtb" address="0x83000000"
loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6UL">Loading device tree.</CMD>
<CMD state="BootStrap" type="jump" > Jumping to OS image. </CMD>
<CMD state="Updater" type="push" body="$ flash_erase /dev/mtd0 0 20">Erasing Boot partition</CMD>
<CMD state="Updater" type="push" body="send" file="files/u-boot-imx6ulevk_qspi1.imx" ifdev="MX6UL">Sending u-boot.bin</CMD>
<CMD state="Updater" type="push" body="$ dd if=$FILE of=/dev/mtd0 bs=1k seek=4" ifdev="MX6SX MX6UL">write U-Boot to NOR flash</CMD>
<!--QSPI header-->
<CMD state="Updater" type="push" body="send" file="files/qspi-nor-micron-n25q256a-config">Sending QSPI config file</CMD>
<CMD state="Updater" type="push" body="$ awk '{s=\"00000000\"$1;l=length(s);if(!((NR-1)%4))printf \"%%08x \",(NR-1)*4;for(i=l-1;i>l-8;i-=2)printf \" %%s\",substr(s,i,2);if(!(NR%4))printf \"\\n\";}' $FILE > qspi-tmp">generate header </CMD>
<!--hexdump to convert ascii value to hex file-->
<CMD state="Updater" type="push" body="$ busybox hexdump -R qspi-tmp > qspi-header">Converting ascii value to hex file</CMD>
<CMD state="Updater" type="push" body="$ dd if=qspi-header of=/dev/mtd0 bs=1k seek=1" ifdev="MX6SX MX6UL">Writing header to NOR flash</CMD>
<!--delete temporary files-->
<CMD state="Updater" type="push" body="$ rm qspi-tmp">Deleting temporary file</CMD>
<CMD state="Updater" type="push" body="$ rm qspi-header">Deleting temporary file</CMD>
<CMD state="Updater" type="push" body="$ echo Update Complete!">Done</CMD>
</LIST>
下面是我的vbs文件 由于上面已经将 ucl2.xml要用到的文件写死了 所以这里实际上只有Quad Nor Flash"项起作用,其他的选项没有什么用
Set wshShell = CreateObject("WScript.shell")
wshShell.run "mfgtool2.exe -c ""linux"" -l ""Quad Nor Flash"" -s ""board=sabresd"" -s ""mmc=0"" -s ""nor=spi-nor"" -s ""6uluboot=evk"" -s ""6uldtb=14x14-evk"" "
Set wshShell = Nothing
通过mfgtool正常烧nor后,重新启动板子,并且在uboot启动过程中敲回车,暂停uboot的引导过程。
然后进行nor的相应操作
首先输入 sf probe 0 找到我们的设备 即nor
烧zImage
tftp 80800000 zImage
擦除0xF0000地址 0xF0 0000size大小空间 0xF0000+ d27458 =E1 7458<0xF0 0000
sf erase 0xF0000 0xF00000
至于为什么是 0xF0000 可以在uboot的源码中找到 即uboot的环境变量会保存到0x000c0000的位置大小 因此我们将我们的kernel烧到0xF0000 防止环境变量和kernel 相互破坏kernel的大小13M多因此 我们将烧录擦除大小设为0xF00000大于0xF0000+ d27458
CONFIG_ENV_OFFSET 偏移地址 000C0000
CONFIG_ENV_SECT_SIZE 0001 0000
CONFIG_ENV_SIZE 0000 2000
将kernel从内存80800000复制到0xF0000的位置 大小为0xd27458
sf write 0x80800000 0xF0000 0xd27458
下面继续烧dtb
tftp 83000000 zImage-imx6ul-14x14-evk.dtb
sf erase 0xF01000 0xA000
sf write 0x83000000 0xF01000 0x8626
dtb 的烧录位置要大于kernel的终止位置 0xE1 7458<0xF01000 dtb大小为0x8626接下来设置启动参数bootcmd、bootargs
setenv bootcmd 'sf probe 0; sf read 0x83000000 0xF01000 0x8626; sf read0x808000000xF0000 0xd27458; bootz 0x80800000 - 0x83000000'
setenv bootargs console=ttymxc0,115200 rdinit=/linuxrc
保存 重启 ok- imx6ul evk板子 QSPI nor启动记录(3) 启动qspi nor 系统
- imx6ul evk板子 QSPI nor启动记录(4) jffs2文件系统制作及nor启动
- imx6ul evk板子 QSPI nor启动记录(1)initramfs文件系统制作
- imx6ul evk板子QSPI nor启动记录(2) inirramfs文件系统制作2
- imx6ul evk板子 记录(5)通过底板sd卡即mmc 0 启动设备
- imx6ul evk板子 记录(5)通过底板sd卡即mmc 0 启动设备
- QSPI nor flash相关驱动代码
- microzed qspi启动方式(1)
- zynq QSPI Flash 启动过程
- zynq QSPI启动速度优化
- zynq QSPI Flash 启动过程
- imx6ul evk板子 使用记录(6) 取消imx6ulevk login的root帐号输入
- zynq-7000的linux QSPI flash启动
- ZYNQ Linux的QSPI Flash启动
- zed board 启动linux-qspi启动、sd卡启动
- nand nor的启动
- powerpc nor flash启动
- nand和nor启动
- HttpClient应用之GET和POST申请
- 教你如何合法续期Replace Pioneer,不需要破解、购买注册码(KEY)
- myfn.tld文件错误
- mysql 错误 SQL Error: 1366: Incorrect string value: "\xE8\xAF\xA6\xE7\xBB\x86…" for column "address" a
- tomcat启动失败
- imx6ul evk板子 QSPI nor启动记录(3) 启动qspi nor 系统
- 第二次作为面试官
- cookies
- Java多线程(四)——线程阻塞四种情况与守护线程
- iOS键盘弹出完美移动控件
- Java锁机制
- 对一个字符串重新排列要求字母在钱数字在后,且不改变字母数字间的原有顺序
- UIControl 的基本使用方法和 Target-Action 机制以及持有环
- Delphi 7 在WIN764位上调用webservice 发生 access violation at address