WhyCan Forum

本站无需注册,无需积分,无需回复可下载所有资料,如果真的喜欢小站,请您注册之后请至少回复一个帖子激活Id,谢谢支持! 站长QQ: 516333132 (挖坑网/填坑网) admin@whycan.cn

您尚未登录。

#1 2019-06-25 16:45:00

Gentlepig
会员
注册时间: 2018-10-24
累计积分: 158

新人求教,编译内核后生成的文件是不是根文件系统?和yaffs有什么关系?

做了个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文件应该添加哪些内容?

离线

#2 2019-06-25 17:51:06

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 6,980

Re: 新人求教,编译内核后生成的文件是不是根文件系统?和yaffs有什么关系?

进去后,在Putty输入ls,可以看到bin, usr, mnt等文件夹。这是不是有了根文件系统了?

按新唐的套路, 很可能是 initramfs, 好几家台湾的soc公司都是这种做法。

就是把根文件系统 和 kernel 打包成 zImage/uImage

所以你烧了 uImage 就自带了 根文件系统。





2019-06-25_175432.gif

具体操作方法是 make menuconfig -> General setup -> Initramfs source file(s)

在线

#3 2019-06-25 17:57:47

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 6,980

Re: 新人求教,编译内核后生成的文件是不是根文件系统?和yaffs有什么关系?

yaffs.img 是把文件系统打包成 yaffs 格式,

也就是说按照 yaffs 规定的格式, 把一个文件夹打包成一个文件。

当然这个文件可以是根文件系统, 也可以不是。

在线

#4 2019-06-26 08:53:35

Gentlepig
会员
注册时间: 2018-10-24
累计积分: 158

Re: 新人求教,编译内核后生成的文件是不是根文件系统?和yaffs有什么关系?

感谢解惑。
如果用了initramfs,就不能再用yaffs了吧?
如果不用initramfs,那么yaffs如何烧写?

uboot-spl烧写到了0位置;
env烧写到了0x80000;
uboot烧写到了0x100000位置,
uImage烧写到了0x200000;

那么yaffs.img烧写到什么位置?env需要做哪些修改?

离线

#5 2019-06-26 09:45:33

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 6,980

Re: 新人求教,编译内核后生成的文件是不是根文件系统?和yaffs有什么关系?

initramfs 文件系统只读, 不能写, 如果你要保存数据, 还是得加上 yaffs 等读写文件系统。

initramfs 和 yaffs  可以共存, 系统启动后, 可以用 mount 挂载到某目录。

initramfs 这种不适合放置大文件, 既占用ROM,又占用 RAM.




yaffs.img烧写到什么位置, env需要做哪些修改, 这个要看 NUC972 的开发手册了。

在线

#6 2019-06-26 10:14:12

Gentlepig
会员
注册时间: 2018-10-24
累计积分: 158

Re: 新人求教,编译内核后生成的文件是不是根文件系统?和yaffs有什么关系?

谢谢,大致理解了。

离线

#7 2019-06-26 12:08:11

Gentlepig
会员
注册时间: 2018-10-24
累计积分: 158

Re: 新人求教,编译内核后生成的文件是不是根文件系统?和yaffs有什么关系?

再请教个问题,我按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这依据,仍是进不到内核。删掉的画,就能进内核。

离线

#8 2019-06-26 13:38:47

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 6,980

Re: 新人求教,编译内核后生成的文件是不是根文件系统?和yaffs有什么关系?

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 看能否挂载上去。

在线

#9 2019-06-26 13:50:51

Gentlepig
会员
注册时间: 2018-10-24
累计积分: 158

Re: 新人求教,编译内核后生成的文件是不是根文件系统?和yaffs有什么关系?

没有这两个文件,那是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)

离线

#10 2019-06-26 14:12:19

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 6,980

Re: 新人求教,编译内核后生成的文件是不是根文件系统?和yaffs有什么关系?

只勾选驱动还不行, 还得去添加或者修改nand设备, 找下是不是有类式 mach-nuc972 的文件夹, 找 dev.c 之类的文件。

在线

#11 2019-06-26 15:49:26

Gentlepig
会员
注册时间: 2018-10-24
累计积分: 158

Re: 新人求教,编译内核后生成的文件是不是根文件系统?和yaffs有什么关系?

应该是make menuconfig配置地问题,找了个现成的.config,重新生成内核并烧录,可以了。

离线

页脚