您尚未登录。

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

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,378
积分: 1343.5

新人求教,编译内核后生成的文件是不是根文件系统?和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

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,348
积分: 9202

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

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,348
积分: 9202

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

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

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

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





离线

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

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,378
积分: 1343.5

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

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,348
积分: 9202

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
已发帖子: 1,378
积分: 1343.5

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

谢谢,大致理解了。

离线

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

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,378
积分: 1343.5

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

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,348
积分: 9202

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
已发帖子: 1,378
积分: 1343.5

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

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,348
积分: 9202

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

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





离线

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

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,378
积分: 1343.5

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

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

离线

楼主 #12 2020-03-24 15:45:04

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,378
积分: 1343.5

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

又把这个帖子翻出来了。
过了半年,又重新下载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)

离线

楼主 #13 2020-03-24 16:40:21

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,378
积分: 1343.5

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

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

离线

#14 2020-03-24 17:06:39

shaoxi2010
会员
注册时间: 2019-06-13
已发帖子: 392
积分: 336

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

Gentlepig 说:

又把这个帖子翻出来了。
过了半年,又重新下载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

首先要打开CONFIG_MTD_CMDLINE_PARTS属性才运行通过命令行传递mtdparts
其次默认情况下是使用设备树传递的MTD分区表,详情阅读uboot代码
最后你的启动找不到文件那就是没编进去

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn