打印
[i.MX]

imx6ul 官方开发板qspi nor 启动linux 怎么操作 (n25q256a )

[复制链接]
6597|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
583893280|  楼主 | 2016-2-25 11:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
583893280|  楼主 | 2016-2-25 11:17 | 只看该作者
已经手动将ucl2.xml 中Quad Nor Flash 内容改成如下

<LIST name="Quad Nor Flash" desc="Choose Quad Nor flash as media">
        <CMD state="BootStrap" type="boot" body="BootStrap" file ="firmware/u-boot-imx6q%board%_%nor%.imx" ifdev="MX6Q">Loading U-boot</CMD>
        <CMD state="BootStrap" type="boot" body="BootStrap" file ="firmware/u-boot-imx6dl%board%_%nor%.imx" ifdev="MX6D">Loading U-boot</CMD>
        <CMD state="BootStrap" type="boot" body="BootStrap" file ="firmware/u-boot-imx6slevk_spi-nor.imx" ifdev="MX6SL">Loading U-boot</CMD>
        <CMD state="BootStrap" type="boot" body="BootStrap" file ="firmware/u-boot-imx6sx%sxuboot%_sd.imx" ifdev="MX6SX">Loading U-boot</CMD>
        <CMD state="BootStrap" type="boot" body="BootStrap" file ="firmware/u-boot-imx7d%7duboot%_sd.imx" ifdev="MX7D">Loading U-boot</CMD>
        <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="0x12000000"
                loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6Q MX6DL">Loading Kernel.</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="0x12C00000"
                loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6Q MX6DL">Loading Initramfs.</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-imx6q-%board%-%nordtb%.dtb" address="0x18000000"
                loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6Q">Loading device tree.</CMD>
        <CMD state="BootStrap" type="load" file="firmware/zImage-imx6dl-%board%-%nordtb%.dtb" address="0x18000000"
                loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6D">Loading device tree.</CMD>
        <CMD state="BootStrap" type="load" file="firmware/zImage-imx6sl-evk.dtb" address="0x83000000"
                loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6SL">Loading device tree.</CMD>
        <CMD state="BootStrap" type="load" file="firmware/zImage-imx6sx-%sxdtb%.dtb" address="0x83000000"
                loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6SX">Loading device tree.</CMD>
        <CMD state="BootStrap" type="load" file="firmware/zImage-imx7d-%7ddtb%.dtb" address="0x83000000"
                loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX7D">Loading device tree.</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-imx6q%board%_%nor%.imx" ifdev="MX6Q">Sending U-Boot</CMD>
        <CMD state="Updater" type="push" body="send" file="files/u-boot-imx6dl%board%_%nor%.imx" ifdev="MX6D">Sending U-Boot</CMD>
        <CMD state="Updater" type="push" body="send" file="files/u-boot-imx6slevk_spi-nor.imx" ifdev="MX6SL">Sending u-boot.bin</CMD>
        <CMD state="Updater" type="push" body="send" file="files/u-boot-imx6sx%sxuboot%_%sxnor%.imx" ifdev="MX6SX">Sending u-boot.bin</CMD>
        <CMD state="Updater" type="push" body="send" file="files/u-boot-imx7d%7duboot%_%7dnor%.imx" ifdev="MX7D">Sending u-boot.bin</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>
        <CMD state="Updater" type="push" body="$ dd if=$FILE of=/dev/mtd0 bs=1k seek=1" ifdev="MX7D">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>
        <CMD state="Updater" type="push" body="$ dd if=qspi-header of=/dev/mtd0 bs=1k seek=0" ifdev="MX7D">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>

使用特权

评论回复
板凳
583893280|  楼主 | 2016-2-25 11:19 | 只看该作者
mfgtools 下面使用 mfgtool2-yocto-mx-14x14-arm2-qspi-nor.vbs

其中 mfgtool2-yocto-mx-14x14-arm2-qspi-nor.vbs内容如下

Set wshShell = CreateObject("WScript.shell")
wshShell.run "mfgtool2.exe -c ""linux"" -l ""Quad Nor Flash"" -s ""board=sabreauto"" -s ""mmc=0"" -s ""nor=spi-nor"" -s ""nordtb=ecspi"" -s ""7duboot=12x12lpddr3arm2"" -s ""sxnor=qspi2"" -s ""7dnor=qspi1"" -s ""6ulnor=qspi1"" -s ""7ddtb=12x12-lpddr3-arm2-qspi"" -s ""norconfig=qspi-nor-micron-n25q256a-config"" -s ""6uldtb=14x14-ddr3-arm2"" -s ""6uluboot=14x14ddr3arm2"" "
Set wshShell = Nothing

使用特权

评论回复
地板
583893280|  楼主 | 2016-2-25 11:20 | 只看该作者

mfgtools 工具起来后 整个过程 显示成功
358448 bytes (358 kB) copied, 1.51556 s, 237 kB/s
UTP: sending Success to kernel for command $ dd if=$FILE of=/dev/mtd0 bs=1k seek=4.
utp_poll: pass returned.
UTP: received command 'send'
UTP: sending Success to kernel for command send.
UTP: received command '$ 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'
UTP: executing "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"
UTP: sending Success to kernel for command $ 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.
utp_poll: pass returned.
UTP: received command '$ busybox hexdump -R qspi-tmp > qspi-header'
UTP: executing "busybox hexdump -R qspi-tmp > qspi-header"
UTP: sending Success to kernel for command $ busybox hexdump -R qspi-tmp > qspi-header.
utp_poll: pass returned.
UTP: received command '$ dd if=qspi-header of=/dev/mtd0 bs=1k seek=1'
UTP: executing "dd if=qspi-header of=/dev/mtd0 bs=1k seek=1"
0+1 records in
0+1 records out
512 bytes (512 B) copied, 0.00172767 s, 296 kB/s
UTP: sending Success to kernel for command $ dd if=qspi-header of=/dev/mtd0 bs=1k seek=1.
utp_poll: pass returned.
UTP: received command '$ rm qspi-tmp'
UTP: executing "rm qspi-tmp"
UTP: sending Success to kernel for command $ rm qspi-tmp.
utp_poll: pass returned.
UTP: received command '$ rm qspi-header'
UTP: executing "rm qspi-header"
UTP: sending Success to kernel for command $ rm qspi-header.
utp_poll: pass returned.
UTP: received command '$ echo Update Complete!'
UTP: executing "echo Update Complete!"
Update Complete!
UTP: sending Success to kernel for command $ echo Update Complete!.
utp_poll: pass returned.

使用特权

评论回复
5
583893280|  楼主 | 2016-2-25 11:22 | 只看该作者
本帖最后由 583893280 于 2016-2-25 14:27 编辑

其实 自己想做的是 将 uboot  kernel rootfs 都烧到nor 里面 直接启动 但是 通过上面的分析 发现 没有烧录 uboot  kernel rootfs 的过程。

使用特权

评论回复
6
583893280|  楼主 | 2016-2-25 11:26 | 只看该作者
自己又看了下 ucl2.xml 中Quad Nor Flash 的过程 发现有烧录 uboot的
<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>
但是不知道 是不是烧录的文件 有问题 还是怎么着 调节sw602开关 使开发板从nor启动 并没有Uboot的打印信息

使用特权

评论回复
7
583893280|  楼主 | 2016-2-25 13:35 | 只看该作者
重新烧录了一遍 Uboot已经烧尽nor了 也可以冲nor 通过net的方式启动内核了 只是 这个 Uboot打印的 nor的信息 显示N25Q256 总共32Mib   开发板上不是说有256M吗 这个还不太清楚 如果是256M 那是不是可以把内核 和 文件系统都烧到 nor 里面 并且冲nor启动系统
SF: Detected N25Q256 with page size 256 Bytes, erase size 4 KiB, total 32 MiB

uboot log如下
   
U-Boot 2015.04-imx_v2015.04_3.14.38_6ul_ga+g5d63276 (Aug 18 2015 - 21:08:41)
                                                                           
CPU:   Freescale i.MX6UL rev1.0 at 396 MHz
CPU:   Temperature 38 C                  
Reset cause: POR      
Board: MX6UL 14x14 EVK
I2C:   ready         
DRAM:  512 MiB
MMC:   FSL_SDHC: 0, FSL_SDHC: 1
SF: Detected N25Q256 with page size 256 Bytes, erase size 4 KiB, total 32 MiB
*** Warning - bad CRC, using default environment                             
                                                
Display: TFT43AB (480x272)
Video: 480x272x24         
In:    serial   
Out:   serial
Err:   serial
Net:   FEC1  
Normal Boot
Hit any key to stop autoboot:  0
=> setenv ipaddr 172.18.11.90   
=> setenv serverip 172.18.11.84
=> save                        
Saving Environment to SPI Flash...
SF: Detected N25Q256 with page size 256 Bytes, erase size 4 KiB, total 32 MiB
Erasing SPI flash...Writing to SPI flash...done                              
=> reset                                       
resetting ...
            

使用特权

评论回复
8
583893280|  楼主 | 2016-2-25 13:36 | 只看该作者
583893280 发表于 2016-2-25 13:35
重新烧录了一遍 Uboot已经烧尽nor了 也可以冲nor 通过net的方式启动内核了 只是 这个 Uboot打印的 nor的信 ...

并且还有个问题 最后挂载文件系统的时候失败
libphy: 20b4000.ethernet:01 - Link is Up - 100/Full
IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
Sending DHCP requests ., OK
IP-Config: Got DHCP answer from 172.18.11.254, my address is 172.18.11.94
IP-Config: Complete:
     device=eth0, hwaddr=00:04:9f:03:fd:1f, ipaddr=172.18.11.94, mask=255.255.255.0, gw=172.18.11.254
     host=172.18.11.94, domain=, nis-domain=(none)
     bootserver=0.0.0.0, rootserver=172.18.11.84, rootpath=
     nameserver0=172.28.4.135, nameserver1=8.8.8.8
ALSA device list:
  #0: wm8960-audio
VFS: Unable to mount root fs via NFS, trying floppy.
VFS: Cannot open root device "nfs" or unknown-block(2,0): error -6
Please append a correct "root=" boot option; here are the available partitions:
1f00           32768 mtdblock0  (driver?)
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
random: nonblocking pool is initialized

使用特权

评论回复
9
583893280|  楼主 | 2016-2-25 14:12 | 只看该作者
本帖最后由 583893280 于 2016-2-25 14:26 编辑
583893280 发表于 2016-2-25 13:36
并且还有个问题 最后挂载文件系统的时候失败
libphy: 20b4000.ethernet:01 - Link is Up - 100/Full
IPv ...

搞了半天 发现nfs 服务器配置不正确 重新整了下nfs
并且在uboot下设置
setenv bootargs console=${console},${baudrate} root=/dev/nfs nfsroot=172.18.11.84:/tftproot/rootfs ip=172.18.11.90:172.18.11.84:172.18.11.254:255.255.255.0:yy2440.arm9.net:eth0:off
等参数 终于通过nor  tftp nfs 可以正常启动 nor的uboot 服务器上的 kernel 和 设备树 以及服务器上的 文件系统
log如下
IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
IP-Config: Complete:
     device=eth0, hwaddr=00:04:9f:03:fd:1f, ipaddr=172.18.11.90, mask=255.255.255.0, gw=172.18.11.254
     host=yy2440, domain=, nis-domain=arm9.net
     bootserver=172.18.11.84, rootserver=172.18.11.84, rootpath=
ALSA device list:
  #0: wm8960-audio
VFS: Mounted root (nfs filesystem) readonly on device 0:12.
devtmpfs: mounted
Freeing unused kernel memory: 388K (809e5000 - 80a46000)
INIT: version 2.88 booting
Starting udev
udevd[151]: starting version 182
bootlogd: cannot allocate pseudo tty: No such file or directory
random: dd urandom read with 113 bits of entropy available
Populating dev cache
random: nonblocking pool is initialized
Tue Jan 19 06:33:24 UTC 2016
INIT: Entering runlevel: 5
Configuring network interfaces... ifup skipped for nfsroot interface eth0
run-parts: /etc/network/if-pre-up.d/nfsroot exited with code 1
Starting syslogd/klogd: done

Poky (Yocto Project Reference Distro) 1.8 imx6ulevk /dev/ttymxc0

imx6ulevk login:

使用特权

评论回复
10
583893280|  楼主 | 2016-2-25 14:16 | 只看该作者
本帖最后由 583893280 于 2016-2-25 14:27 编辑

不过 现在 也只是能通过nor 启动 服务器上的kernel 和rootfs
还是没找到办法 可以将kernel和rootfs烧进nor并且直接启动nor里的kernel和rootfs  有清楚的坛友不

使用特权

评论回复
11
583893280|  楼主 | 2016-2-26 12:04 | 只看该作者
继续跟进 现在通过查阅资料 可以将 kernel和设备树 烧到nor 并且 通过设置bootcmd 等参数 可以 启动nor的内核 和 设备树 不过文件系统启的还是sd上的   
最终需要启动nor上文件系统 目前文件系统 还没有找到方法  看来需要先对nor分区 然后 在烧jffs2文件 。还不太清楚怎么通过yocto生成jffs2格式的文件系统。

使用特权

评论回复
12
583893280|  楼主 | 2016-2-26 17:18 | 只看该作者
目前 已经 生成了jffs2 文件 没有用yocto的方式  用通用的方法。不过nor 分区及烧录文件系统 和 启动nor里面的文件系统还在研究中,有知道的望指点一二

使用特权

评论回复
13
mini1986| | 2016-3-1 09:04 | 只看该作者
过程写的很不错,帮你顶一下......

使用特权

评论回复
14
583893280|  楼主 | 2016-3-1 15:07 | 只看该作者
继续 目前 问题已经解决  下面说说解决的方式
之前考虑到用nor启动需要制作jffs2  也制作了相应的jffs2系统 只是这个板子的nor本身不大 系统检测出来是32M 然后需要分区 还有本身还要烧录一段Image head 。先用sd卡启动 然后 fdisk分区 在然后挂载nor 可以看到 nor里面的jffs2文件。但是 断电重启 选择nor启动 就不行了 。最后放弃了 jffs2的方式。改用initramfs,因为mfgtool就是用的initramfs的方式。并且之前把kernel和dtb烧到nor里面是可以正常启动的,只是当时文件系统还是挂载的sd的。initramfs可以和内核做到一起,所以就选择initramfs的方式了。
initramfs制作完成后,通过tftp启动是可以的。但是直接烧进nor并且保存bootarg 及bootcmd后 系统却无法从nor启动。后来又跟踪了下发现,uboot下save的时候保持到了0x000c 0000的位置,跟自己放置的nk冲突,后来重新调整nk和dtb的位置,后启动成功。

使用特权

评论回复
15
583893280|  楼主 | 2016-3-1 17:07 | 只看该作者
具体可以百度 搜索《 imx6ul evk板子 QSIP nor启动记录(1) inirramfs文件系统制作》

使用特权

评论回复
16
583893280|  楼主 | 2016-3-2 14:45 | 只看该作者
继续 跟进下 目前 通过网友的提示 也已经将jffs2 通过nor启动了 具体 请参见《imx6ul evk板子 QSIP nor启动记录(4) jffs2文件系统制作及nor启动》

使用特权

评论回复
17
韬铸88| | 2016-6-28 10:45 | 只看该作者
mark,学习了,谢谢分享

使用特权

评论回复
18
as807048861| | 2018-2-2 09:25 | 只看该作者
qq:807048861  老铁   多多指教

使用特权

评论回复
19
韬铸88| | 2018-5-7 14:21 | 只看该作者
了解一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

47

帖子

3

粉丝