This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/LINUXSDK-OMAPL138:NAND 上的 JFFS2 rootfs

Guru**** 2589300 points
Other Parts Discussed in Thread: TMDSLCDK138, OMAP-L138

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/640940/linux-linuxsdk-omapl138-jffs2-rootfs-on-nand

器件型号:LINUXSDK-OMAPL138
主题中讨论的其他器件:OMAPL138TMDSLCDK138OMAP-L138

工具/软件:Linux

我使用的是 OMAPL138 LCDK (TMDSLCDK138)、PROCESSOR-SDK-LINUX_OMAPL138 04_01_00_06。

我的目标是将所有 u-boot、内核、rootfs、dtb 放置在 NAND 闪存中。

我已成功将预编译的 u-boot 和内核写入 NAND。 现在、我可以使用从 NAND (u-boot、NAND 上的内核;SD 上的 rootfs)引导 Linux。  

我还使用 MTD 和 jffs2 (e2e.ti.com/.../7723_2E00_tialt3_2E00_config)重建了内核。

我已成功地将 jffs2映像从目标 Linux 环境写入 NAND 分区(从 SD 引导)。 NAND 分区已成功装载、我可以看到 rootfs 内容。

当我尝试使用 NAND rootfs 分区引导过程中的桩模块手动引导系统时,出现以下消息:  

(笑声) 
没有文件系统可以挂载根、已尝试:jffs2 内核紧急情况-未同步:vfs:无法在未知块(0、0)上挂载根 FS --[结束内核紧急情况-未同步:vfs:无法在未知块(0、0)上挂载根 FS

U-boot 环境:

单击以查看

args_mmc=run finduid;setenv bootargs console=${console}${optargets}root=pARTUUID =${uuid}rw rootfstype=${mmloadotfstype}
budrate=115200
boot_fdT = yes
boot_fit=0
bootcmd=run;run mmcloaddrom=2


uEnv.txt




;如果在 mmc 启动时运行 mmc bootloads=2、则运行 mmc;如果在 bootmcmd=dr 文件中运行 bootmcandr;如果在 dr =命令文件中运行 mmc bootmc = 1、则运行 bootmc bootmc = 1、则运行 bootmc;如果在 dr 命令文件;如果在 dr 命令 b = 1、则运行 bootmc = 1、则运行 bootmc bootmc = 1、则在 dr;如果在 dr;如果在 dr bootmc = 1、则运行 bootmc bootmc = 然后从${bootenvfile}加载 env;运行 import
bootenv;fi;if test -n $uvencmd;然后回显运行 uvencmd ...;运行 uvencmd;fi;fi;fi;
ethact=davi-emac
fdtaddr=0xc0600000
fdtfile=uida-lcdk.dtb
finuduid=mmc
;从导入环境中导入$bootenid 环境中导入$bootenid env 导入-t ${loadaddr}${filesize}
loadaddr=0xc0700000
loadbootenv=fatload mmc ${mmcdev}${loadaddr}${bootenvfile}
loadbootscript=load mmc ${mmcdr}${loadaddr}bootdev=load
${mmc}

${bootdevr}${mmdev_mc}${bootdev_mc}${bootdev_mc}${bootdev_mc}${bootdev_mc}${bootdev_mcr}${bootdev_mcr}${bootdev_mcr}${bootmc}${bootdev_mc}${bootdev_mcr}${bootdev_mcr}${bootdev_mcr}${bootdev_mcr}${bootmc}${bootmcr}${bootdev_ 然后、如果测试${boot_fit}-eq 1;然后运行 loadfit;否则运行
mmclosados;fi;fi;fi;
mmcdev=0
mmcloados=run args_mmc;如果测试${boot_FDT}= yes || test ${boot_FDT}= try;然后运行 bootfdt;然后尝试${boottz};否则${loadaddr = tb:tb};如果测试${boot_tests = loadaddr: 不能对
DT、fi、fi、其他 bootz、fi、
mmwritotfstype=ext4 rootwait
mtddevname=u-boot env
mtddevnum=0
mtdds=nand0=nand512
mtdparts=mtdparts=nand512:0x20000 (u-boot env)、0x80000 (u-boot)、0x50000 (kernel)、0x000000








(kernel=mtdsp=n800=nfb)和0x20000 bstdes=24=24=db (r=db

我尝试启动的方式:(rootwait 也尝试过)

NAND 读取${loadaddr}内核
加载 MMC 0:2 ${fdtaddr}/boot/da850-lcdk.dtb
setenv bootargs console=${console}rootfstype=jffs2 /dev/mtdblock3 mtdparts=davinci-nand.0:128k (u-boot_env)、512K (u-boot)、5m (内核)-
{dtadds}${dtadds} 

引导日志:  

单击以查看

=>加载 MMC 0:2 ${loadaddr}/boot/zImage
2550968字节在2926ms (850.6 KiB/s)内读取
=>加载 MMC 0:2 ${fdtaddr}/boot/devicetree-zImage-da850-lcdk.dtb
13361字节在53ms 内读取(246.1 KiB/s)
=> setenv bootargs console=${console}root=/dev/mtdblock3 rw rootfstype=jffs2 mtdparts=davinci-nand.0:128k (u-boot_env)、512K (u-boot)、5m (内核)、-(rootfs)
=> bootz ${dtaddr}-${f600addb}

在
e1000结束时使用 bldb 将设备树形结构化的0x600db 装到0x27000 bdb 确定

启动内核...

正在解压缩 Linux... 已完成、正在引导内核。
在物理 CPU 上引导 Linux 0x0
Linux 版本4.9.41-ge3a80a1c5c (用户@用户-VM)(gcc 版本6.2.1 20161016 (Linaro GCC 6.2-2016.11))#1抢先于 Sun 11月19:17:23:53 +06高速

缓存2017 CPU:ARM926EJ-S [41069265]版本5 (ARMAC 6.2-2016.11) PREMT:V53138
:VDCR STUARM1808:VDCR CPU
指令缓存/VDCR RAM:VDt RAM 数据缓存:LDA8=VDt RAM:VDCP/OMAP-W7850 已创建0xc3000000处的存储器池、大小为16 MIB
、共:保留内存:已初始化节点 DSP_CMA@c3000000、兼容 ID 共享 DMA 池
:在0xc6c00000处保留16 MIB
内存策略:通过
达芬奇 da850/OMAP-L138/AM18x 变体0x1
按区域顺序构建1个区域列表、移动分组。 总页数:32480
内核命令行:console=ttyS2,115200n8 root=/dev/mtdblock3 rw rootfstype=jffs2 mtdparts=Davinci-nand.0:128k (u-boot_env)、512K (u-boot)、

384 m (内核)、-(rootfs) PID 哈希表条目:512 (顺序:-1、536字节:

内存条目:1668个字节:3bytes (命令)、548m)、5r 条目:5r (命令:548m) 89660K/131072K 可用(4906K 内核代码、319K rwdata、1560K rodata、232K init、166K BSS、 8644K 保留、32768K CMA 保留)
虚拟内核内存布局:
向量:0xff0000-0xff1000 (4KB)
Fixmap:0xc00000 - 0xc00000 (3072 KB)
vmalloc:0xc8800000 - 0x0x800000 (880 MB)
低内存:0xC0000000 - 0xC80000 (128 MB)
模块:bbf000000 - 0xC0000000 (16 MB)
.text:0xc0008000 - 0xc04d2f80 (4908 KB)
init:0xc065a000 - 0xc0694000 (232 KB)
.data:0xc0694000 - 0xc06e3db0 (320 KB)
.bss:0xc06e3db0 - 0xc070d5c8 (167KB)
slub:HWalign=32、order=0-3、MinObjects=0、CPU=1、Nodes =1
可抢占分层 RCU 实现。
叶片扇出的构建时间调整为32。
NR_IRQ:245
时钟源:timer0_1:屏蔽:0xFFFFFFFF max_cycles:0xFFFFFFFF、max_idle_ns:79635851949 ns
sched_clock:32位、24MHz、分辨率41ns、每89478484971ns 换行
控制台:彩色虚拟设备80x30
校准延迟环路... 227.32 BogoMips (lpj=1136640)
pid_max:default:32768 minimum:301
mount-cache hash 表条目:1024 (顺序:0、4096字节)
mountpoint-cache hash 表条目:1024 (顺序:0、4096字节)
CPU:Testing write buffer conformed:OK
Setting up static identity map for 0xc0008400 - 0xc0008458
vjefs
:0.3 vjefs:not present
source initialized dockes: vjefs:vjefs 掩码:0xFFFFFFFF max_cycles:0xFFFFFFFF、max_idle_ns:19112604462750000 ns
futex 哈希表条目:256 (顺序:-1、3072字节)
pinctrl 内核:已初始化 pinctrl 子系统
NET:已注册协议系列16
DMA:预分配256 K2B 池用于原子能相干分配
cputleidle:使用调节

器 mux_dutruler 菜单:使用已初始化 pux mux:使用梯形控制器 mux:使用 dul
设置寄存器 RTC_ALARM
多路复用器:PINMUX0 (0x00000000)= 0x44080000 -> 0x24080000
无 ATAGs?
EDMA 1c00000。EDMA:memcpy 被禁用
EDMA 1c00000。EDMA:TI EDMA 引擎驱动程序
EDMA 1e30000。EDMA:memcpy 被禁用
EDMA 1e30000。EDMA:TI EDMA 引擎驱动程序
i2c_Davinci i2c_Davinci。1:无法找到节点/clockpin1000@
的 mudes mute_pin1000@:1 mux_clockpin0源

代码:已注册 mux_1000 mux_clockpin0源代码:tc1000 mux_clockpin0源代码1:tc1000 mux_clockpin1000:tc1000 1024 (顺序:0、4096字节)
TCP 绑定哈希表条目:1024 (顺序:0、4096字节)
TCP:配置哈希表(建立的1024 BIND)
UDP 哈希表条目:256 (顺序:0、4096字节)
UP-Lite 哈希表条目:256 (顺序:0、4096字节)
NET:注册协议系列1
RPC: 注册的 UNIX 套接字传输模块。
RPC:注册的 UDP 传输模块。
RPC:注册的 TCP 传输模块。
RPC:已注册的 TCP NFSv4.1反向通道传输模块。
工作集:timestamp_bits=14 max_order=15 bucke_order=1
jffs2:版本2.2。 (NAND)(摘要)Copyright2001-2006 Red Hat, Inc.
块层 SCSI 通用(BSG)驱动程序0.4版已加载(主要250)
已注册的 IO 调度程序 NOOP (默认)
pinctrl-single 1c14120.pinmux:PA fec14120处160个引脚大小80
串行:8250/16550驱动程序、10个端口、IRQ 共享禁用
控制台[ttyS2]已禁用
串行8250.2: MMIO 0x1d0d000 (IRQ = 61、BASE_BAUD = 8250000)上的 ttyS2是启用 TI DA8xx/66AK2x
控制台[ttyS2]
的返修:模块加载
libphy:固定 MDIO 总线:Probed
Davinci_MDIO Davinci_MDIO 0:达

芬奇 MDIO 修订版1.5 Davinci MDIO_MDIO 修订版0:不支持实时扫描 DaVinci_MDIO.0的探测失败、错误-5
i2c /dev/entries driver
DaVinci_MMC DA830-MMC.0:获取 CD GPIO
DaVinci_MMC DA830-MMC.0:使用 DMA、4位模式
NET:注册协议系列10
SIT:IPv6、IPv4和 MPLS over IPv4隧道驱动
程序 NET:注册协议系列17
控制台[netcon0]启用
的网络控制台:
DaVinci_EMAC.1启动的网络日志记录 读取 Mac 地址的机器/设备类型不兼容
DaVinci_EMAC DaVinci_EMAC.1:使用随机 MAC 地址:5e:8e:C8:D3:26:ff
mmc0:主机不支持读取只读开关、假设启用写入
输入:GPIO 密钥作为/devices/platform/gpio-keys/input/input0
mmc0:地址为0007
mmcblk0的新高速 SDHC 卡:7 gibk2:8 GB mmc0:7 giblik0:7 mmc2:8 GB mmc0:8 GB mmc1:8 GB mmc0

无法打开所有
分区的 RTC 设备(rtc0)列表
:0100 32768 ram0 (驱动器?)
B300 7782400 mmcblk0驱动程序:mmcblk
B301 71680 mmcblk0p1 794be9e4-01
B302 7693312 mmcblk0p2 794be9e4-02
没有文件系统可以挂载根、已尝试:jffs2

内核严重错误-未同步:VFS:无法在未知块(0、0)上安装根 FS
--[结束内核严重错误-未同步:VFS:无法在未知块(0、0)上安装根 FS
随机:快速初始化完成 

谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    以下是将 u-boot 加载到 OMAP-L138 LCDK 的 NAND 中的正确命令:
    processors.wiki.ti.com/.../Linux_Core_U-Boot_User's_Guide
    之后、我看到您使用了 jffs。 您能否分享一下您是如何构建 jffs2的? 我认为这很可能是你问题的根本原因。 您能否尝试以下操作:
    mkfs.jffs2–r rootfs -o rootfs.jffs2 -e 128–n -p

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、感谢您的回复。

    我正在使用命令集:

    主机:------------------------------------------------
    $ tar -XF arago-base-tisdk-image-omap138-lcdk.tar.xz -C rootfs
    $ mkfs.jffs2 -r rootfs -e 128 -n -p -o arago-base-tisdk-image-omap138-lcdk-rootfs.jffs2
    
    目标:-------------------------------------------------------
    $ cat /proc/mtd
    dev:size erasesize name
    mtd0:00020000 00020000 "u-boot_env"
    mtd1:00080000 00020000 "u-boot"
    mtd2:00500000 00020000 "kernel"
    mtd3:1fa60000 00020000 "rootfs"
    $ flash_erase /dev/mtd3 fa0
    Erasing 128 kiboot @:1fb 00000_bad 00000_bad 0b
    
    闪存块:1fb 00000_bad 90000_block:1fskiptskerskerskipping 0990090000_bt 跳过位于1fa20000
    flash_erase 的坏块:跳过位于1fa40000的坏块
    Erasing 128 Kibyte @ 1fa40000 -- 100%完成
    $ nandwrite -p /dev/mtd3 /boot/arago-base-tisdk-image-omapl138-lcdk-rootfs.jffs2
    在偏移量0x0处将数据
    写入块1在偏移量0x20000
    处...
    在偏移量0x6200000
    $ mount -t jffs2 /dev/mtdblock3 /mnt/nandrootfs
    jffs2处写入数据到块784:注意:(610) jffs2_build_xattr_subsystem:完成构建 xattr 子系统、找到0个 xdatum (0未检查、0个孤立)和0个 xref (0个死区、0个孤立区)。
    $ ls -l /mnt/nandrootfs
    drwxr-xr-x 2 1000 1000 2017年9月26日 bin
    drwxr-xr-x 2 1000 1000 2017年9月26日启动
    drwxr-xr-x 2 1000 1000 2017年9月26日 dev
    drwxr-xR-x 33 1000 1000 2017年9月26日 etc
    drwxr-xr-x 3 1000 1000 2017年9月0日26日主页
    lrwxrwxrwx 1 1000 1000 2017年9月26日初始化->/lib/systemd/systemd
    drwxr-xr-x 8 1000 1000 2017年9月26日 lib
    drwxr-xr-x 2 1000 1000 2017年9月26日介质
    drwxr-xr-x 3 1000 1000 2017年9月26日 mnt
    drwxr-xr-x 3 1000 1000 2017年9月26日 OPT
    drwxr-xr-x 2 1000 1000 2017年9月26日 proc
    drwxr-xr-x 2 1000 1000 2017年9月26日运行
    drwxr-xr-x 2 1000 1000 2017年9月26日 sbin
    drwxr-xr-x 3 1000 1000 2017年9月26日 srv
    drwxr-xr-x 2 1000 1000 2017年9月0日 sys
    drwxrwxr-x 2 1000 1000 2017年9月26日 tmp
    drwxr-xr-x 11 1000 1000 2017年9月26日 usr
    drwxr-xr-x 8 1000 1000 2017年9月0日
    

    从 SD 引导的 Linux 中执行的目标命令。

    重新引导后、使用上述命令从 NAND 引导过程卡滞。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我注意到 Nand 驱动程序在加载 rootfs 后启动的事实。 它看起来像是 nand 驱动程序构建为内核模块并从 rootfs 加载。 这是从 SD e2e.ti.com/.../boot_5F00_from_5F00_SD.log 引导的日志

    但 MTD 在内核配置中静态包含

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已解决问题。 我将很快发布正确的内核配置。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    感谢您更新该主题。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    解析:内核必须包含内存控制器驱动程序"Texas Instruments AEMIF driver"

    设备驱动程序-->
    [*]内存控制器驱动程序-->
    <*>德州仪器(TI)的 AEMIF 驱动程序 

    默认情况下、此驱动程序配置为内核模块。

    我的配置文件: e2e.ti.com/.../omapl138lcdk_2D00_alternate_2E00_config

    我的引导日志: e2e.ti.com/.../rootfs_5F00_on_5F00_NAND.log

    此配置有一些 JFFS2问题未解决:如所示的多条消息  

    jffs2:MTD->READ (0x620f800的0x11e 字节)返回 ECC 错误
    jffs2:MTD->READ (0x620e800的0x7da 字节)返回 ECC 错误
    jffs2:MTD->READ (0x620e000的0x77c 字节)返回 ECC 错误
    jffs2:MTD->READ (0x620d800的0x7b9字节)返回 ECC 错误
    jffs2:MTD->READ (0x620d000的0x73c 字节)返回 ECC 错误
    jffs2:MTD->READ (0x620c800的0x626字节)返回 ECC 错误