做了个nuc972的板。
uboot和内核编译好了,利用nu-writer烧到nand flash里了。
内核编译生成的是uImage文件。
进去后,在Putty输入ls,可以看到bin, usr, mnt等文件夹。这是不是有了根文件系统了?
那么,还需要利用mkyaffs命令建立yaffs.img文件吗?
yaffs.img和uImage文件又有什么区别?我看yaffs.img是根据rootfs文件夹生成的,rootfs文件夹里的内容,基本和现在烧到芯片里的uImage的内容差不多。
如果需要烧录yaffs.img文件的话,应该烧录的什么位置呢?相应的env文件应该添加哪些内容?
离线
进去后,在Putty输入ls,可以看到bin, usr, mnt等文件夹。这是不是有了根文件系统了?
按新唐的套路, 很可能是 initramfs, 好几家台湾的soc公司都是这种做法。
就是把根文件系统 和 kernel 打包成 zImage/uImage
所以你烧了 uImage 就自带了 根文件系统。
具体操作方法是 make menuconfig -> General setup -> Initramfs source file(s)
离线
感谢解惑。
如果用了initramfs,就不能再用yaffs了吧?
如果不用initramfs,那么yaffs如何烧写?
uboot-spl烧写到了0位置;
env烧写到了0x80000;
uboot烧写到了0x100000位置,
uImage烧写到了0x200000;
那么yaffs.img烧写到什么位置?env需要做哪些修改?
离线
initramfs 文件系统只读, 不能写, 如果你要保存数据, 还是得加上 yaffs 等读写文件系统。
initramfs 和 yaffs 可以共存, 系统启动后, 可以用 mount 挂载到某目录。
initramfs 这种不适合放置大文件, 既占用ROM,又占用 RAM.
yaffs.img烧写到什么位置, env需要做哪些修改, 这个要看 NUC972 的开发手册了。
离线
谢谢,大致理解了。
离线
再请教个问题,我按bsp手册,取消了initramfs的勾选,然后在boot options里设置
(noinitrd root=/dev/mtdblock2 rootfstype=yaffs2 rootflags=inband-tags console=ttyS0, 115200n8 rdinit=/sbin/init mem=64M) Default kernel command string
编译后生成uImage文件,烧录进芯片0x200000位置,yaffs.img烧录到0x2000000位置。结果内核启动后,没有挂载根文件系统。
VFS: Cannot open root device "mtdblock2" or unknown-block(0,0): error -19
Please append a correct "root=" boot option; here are the available partitions:
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
CPU: 0 PID: 1 Comm: swapper Not tainted 3.10.107 #2
然后我就修改env文件,打算添加这两句:
bootargs=noinitrd root=/dev/mtdblock2 rootfstype=yaffs2
rootflags=inband-tags console=ttyS0,115200n8 rdinit=/sbin/init mem=64M mtdparts=nand0:0x200000@0x0(u-boot)ro,0x800000@0x200000(kernel)ro,-(user)
结果内核都进不去,卡到这里:
Starting kernel ...
SF: Detected W25Q128BV with page size 256 Bytes, erase size 4 KiB, total 16 MiB
SF:
我试着逐渐删除添加的这两行内容,直到只保留bootargs=noinitrd这依据,仍是进不到内核。删掉的画,就能进内核。
离线
VFS: Cannot open root device "mtdblock2" or unknown-block(0,0): error -19
Please append a correct "root=" boot option; here are the available partitions:
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
CPU: 0 PID: 1 Comm: swapper Not tainted 3.10.107 #2
看错误提示, 很可能没有生成 /dev/mtdX 和 /dev/mtdblockX
你试一试用 initramfs 作为根文件系统先进入命令行, 然后看log有无生成上面的设备,
如果有, 继续使用 mount -t yaffs2 /dev/mtdblock2 /mnt/XXXX 看能否挂载上去。
离线
没有这两个文件,那是mencuconfig里设置的问题?
~ # cd dev
/dev # ls
console ram8 tty28 tty50
cpu_dma_latency ram9 tty29 tty51
full random tty3 tty52
kmem tty tty30 tty53
kmsg tty0 tty31 tty54
mdev.seq tty1 tty32 tty55
mem tty10 tty33 tty56
network_latency tty11 tty34 tty57
network_throughput tty12 tty35 tty58
null tty13 tty36 tty59
ptmx tty14 tty37 tty6
ram0 tty15 tty38 tty60
ram1 tty16 tty39 tty61
ram10 tty17 tty4 tty62
ram11 tty18 tty40 tty63
ram12 tty19 tty41 tty7
ram13 tty2 tty42 tty8
ram14 tty20 tty43 tty9
ram15 tty21 tty44 ttyS0
ram2 tty22 tty45 urandom
ram3 tty23 tty46 vcs
ram4 tty24 tty47 vcs1
ram5 tty25 tty48 vcsa
ram6 tty26 tty49 vcsa1
ram7 tty27 tty5 zero
---------------------------------------------------------
翻bsp使用手册,找到了下面这句,估计是这里的问题。
YAFFS2 文件系統設置
YAFFS2 是 NAND flash 上使用的文件系統之一, 需先使能 MTD 的 “Caching block device access to MTD devices Device drivers” 方可勾選。 可以照以下的設置使能︰ File systems ---> [x] Miscellaneous filesystems ---> <x> yaffs2 file system support <x> Autoselect yaffs2 format <x> Enable yaffs2 xattr support
加載 YSFFS2 文件系統的命令是︰ $ mount –t yaffs2 –o”inband-tags” /dev/mtdblock2 /flash
最近编辑记录 Gentlepig (2019-06-26 13:56:32)
离线
应该是make menuconfig配置地问题,找了个现成的.config,重新生成内核并烧录,可以了。
离线
又把这个帖子翻出来了。
过了半年,又重新下载gitee上的uboot、内核,编译后又无法加载根文件系统了。
对照了之前的内核编译配置,之前boot option里有:
root=/dev/mtdblock2 rootfstype=yaffs rootflags=inband-tags console=tty0 console=ttyS0,115200n8 rdinit=/sbin/init mem=64M mtdparts=nand0:0x200000@0x0(uboot),0x1400000@0x200000(kernel),-(user)
红字部分是我现在的内核编译配置没有的。
我又找到了之前的环境变量文件,有两个,有一点区别:
baudrate=115200
bootdelay=1
ethact=emac
ethaddr=00:00:00:11:66:88
stderr=serial
stdin=serial
stdout=serial
ipaddr=192.168.1.11
serverip=192.168.1.99
bootcmd=nboot 0x7fc0 0 0x200000\; bootm 0x7fc0
bootargs=noinitrd root=/dev/mtdblock2 rootfstype=yaffs2
rootflags=inband-tags console=ttyS0,115200n8 rdinit=/sbin/init mem=64M mtdparts=nand0:0x200000@0x0(u-boot)ro,0x800000@0x200000(kernel)ro,-(user)
其中一个环境变量文件里有mtdparts参数,结果我把这个env.txt烧录进去后,开始加载内核就没串口输出了。
Loading from nand0, offset 0x200000
Image Name: Linux-3.10.108+
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 2247896 Bytes = 2.1 MiB
Load Address: 00008000
Entry Point: 00008000
## Booting kernel from Legacy Image at 00007fc0 ...
Image Name: Linux-3.10.108+
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 2247896 Bytes = 2.1 MiB
Load Address: 00008000
Entry Point: 00008000
Verifying Checksum ... OK
XIP Kernel Image ... OK
Starti
最近编辑记录 Gentlepig (2020-03-24 15:51:52)
离线
env.txt里的红字部分,只保留mtdparts=...这一行,就可以启动了。
可其他红字部分,和boot option里的参数一样啊。
加载文件系统后,还有些no found。
-/bin/sh: /mnt/mmcblk0p1/scan_zbar: not found
-/bin/sh: 7: not found
-/bin/sh: 8: not found
-/bin/sh: 9: not found
-/bin/sh: 10: not found
-/bin/sh: 11: not found
-/bin/sh: 12: not found
-/bin/sh: 13: not found
-/bin/sh: 14: not found
离线
又把这个帖子翻出来了。
过了半年,又重新下载gitee上的uboot、内核,编译后又无法加载根文件系统了。
对照了之前的内核编译配置,之前boot option里有:
root=/dev/mtdblock2 rootfstype=yaffs rootflags=inband-tags console=tty0 console=ttyS0,115200n8 rdinit=/sbin/init mem=64M mtdparts=nand0:0x200000@0x0(uboot),0x1400000@0x200000(kernel),-(user)
红字部分是我现在的内核编译配置没有的。我又找到了之前的环境变量文件,有两个,有一点区别:
baudrate=115200
bootdelay=1
ethact=emac
ethaddr=00:00:00:11:66:88
stderr=serial
stdin=serial
stdout=serial
ipaddr=192.168.1.11
serverip=192.168.1.99
bootcmd=nboot 0x7fc0 0 0x200000\; bootm 0x7fc0
bootargs=noinitrd root=/dev/mtdblock2 rootfstype=yaffs2
rootflags=inband-tags console=ttyS0,115200n8 rdinit=/sbin/init mem=64M mtdparts=nand0:0x200000@0x0(u-boot)ro,0x800000@0x200000(kernel)ro,-(user)其中一个环境变量文件里有mtdparts参数,结果我把这个env.txt烧录进去后,开始加载内核就没串口输出了。
Loading from nand0, offset 0x200000
Image Name: Linux-3.10.108+
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 2247896 Bytes = 2.1 MiB
Load Address: 00008000
Entry Point: 00008000
## Booting kernel from Legacy Image at 00007fc0 ...
Image Name: Linux-3.10.108+
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 2247896 Bytes = 2.1 MiB
Load Address: 00008000
Entry Point: 00008000
Verifying Checksum ... OK
XIP Kernel Image ... OKStarti
首先要打开CONFIG_MTD_CMDLINE_PARTS属性才运行通过命令行传递mtdparts
其次默认情况下是使用设备树传递的MTD分区表,详情阅读uboot代码
最后你的启动找不到文件那就是没编进去
离线