Tool/software: Linux
I have custom board whose MCU is am3352. I am working on sdk 02.00.02.11
I am trying to boot linux system by using SPI Nor Flash.
I succeeded in writing MLO.byteswap, u-boot.img, dtb, and zImage on SPI Nor Flash.
However, I couldn't mount the file-system on Linux startup.
I wrote my rootfs.jffs2 on flash's 6th partition.
So, I set the spiroot to '/dev/mtdblock6 rw'.
I don't know what mistake I made on my system.
It's possible to mount the 6th partition (file-system) of flash after finishing entire booting. So I'm sure that the file-system is well-written
I attatched the kernel log, u-boot env, and dts file.
Anyone help me.. I couldn't find the mtdblock series on "List of all partitions" of kernel log.
This is kernel booting log
U-Boot 2015.07 (Mar 03 2017 - 18:39:01 +0900)
I2C: ready
DRAM: 256 MiB
MMC: OMAP SD/MMC: 0, OMAP SD/MMC: 1
SF: Detected S25FL512S_256K with page size 512 Bytes, erase size 256 KiB, total 64 MiB
*** Warning - bad CRC, using default environment
Net: cpsw, usb_ether
Hit any key to stop autoboot: 0
U-Boot# setenv spiroot '/dev/mtdblock6 rw'
U-Boot# setenv spiargs 'setenv bootargs console=${console} ${optargs} root=${spiroot} rootfstype=${spirootfstype}'
U-Boot# setenv spiboot 'echo Booting from spi ...; sf probe 0:0; sf read ${loadaddr} ${spisrcaddr} ${spiimgsize}; sf read ${fdtaddr} ${spifdtaddr} ${spifdtsize}; run spiargs; bootz ${loadaddr} - ${fdtaddr}'
U-Boot# run spiboot
Booting from spi ...
SF: Detected S25FL512S_256K with page size 512 Bytes, erase size 256 KiB, total 64 MiB
device 0 offset 0xe0000, size 0x362000
SF: 3547136 bytes @ 0xe0000 Read: OK
device 0 offset 0x80000, size 0xf000
SF: 61440 bytes @ 0x80000 Read: OK
Kernel image @ 0x82000000 [ 0x000000 - 0x31d810 ]
## Flattened Device Tree blob at 88000000
Booting using the fdt blob at 0x88000000
Loading Device Tree to 8ef2f000, end 8ef3a454 ... OK
Starting kernel ...
[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Initializing cgroup subsys cpuacct
[ 0.000000] Linux version 4.1.18-gbbe8cfc (root@ubuntu) (gcc version 4.9.3 20150413 (prerelease) (Linaro GCC 4.9-2015.05) ) #39 PREEMPT Fri Feb 24 18:32:42 KST 2017
[ 0.000000] CPU: ARMv7 Processor [413fc082] revision 2 (ARMv7), cr=10c5387d
[ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[ 0.000000] Machine model: TI AM335x EVM
[ 0.000000] cma: Reserved 24 MiB at 0x8d000000
[ 0.000000] Memory policy: Data cache writeback
[ 0.000000] CPU: All CPU(s) started in SVC mode.
[ 0.000000] AM335X ES2.1 (neon )
[ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 64960
[ 0.000000] Kernel command line: console=ttyO0,115200n8 root=/dev/mtdblock6 rw rootfstype=jffs2
[ 0.000000] PID hash table entries: 1024 (order: 0, 4096 bytes)
[ 0.000000] Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
[ 0.000000] Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
[ 0.000000] Memory: 225568K/262144K available (6315K kernel code, 247K rwdata, 2148K rodata, 268K init, 233K bss, 12000K reserved, 24576K cma-reserved, 0K highmem)
[ 0.000000] Virtual kernel memory layout:
[ 0.000000] vector : 0xffff0000 - 0xffff1000 ( 4 kB)
[ 0.000000] fixmap : 0xffc00000 - 0xfff00000 (3072 kB)
[ 0.000000] vmalloc : 0xd0800000 - 0xff000000 ( 744 MB)
[ 0.000000] lowmem : 0xc0000000 - 0xd0000000 ( 256 MB)
[ 0.000000] pkmap : 0xbfe00000 - 0xc0000000 ( 2 MB)
[ 0.000000] modules : 0xbf000000 - 0xbfe00000 ( 14 MB)
[ 0.000000] .text : 0xc0008000 - 0xc084c05c (8465 kB)
[ 0.000000] .init : 0xc084d000 - 0xc0890000 ( 268 kB)
[ 0.000000] .data : 0xc0890000 - 0xc08cdfa0 ( 248 kB)
[ 0.000000] .bss : 0xc08d0000 - 0xc090a7c8 ( 234 kB)
[ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[ 0.000000] Preemptible hierarchical RCU implementation.
[ 0.000000] Additional per-CPU info printed with stalls.
[ 0.000000] NR_IRQS:16 nr_irqs:16 16
[ 0.000000] IRQ: Found an INTC at 0xfa200000 (revision 5.0) with 128 interrupts
[ 0.000000] OMAP clockevent source: timer2 at 24000000 Hz
[ 0.000016] sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 89478484971ns
[ 0.000037] clocksource timer1: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 79635851949 ns
[ 0.000048] OMAP clocksource: timer1 at 24000000 Hz
[ 0.000242] Console: colour dummy device 80x30
[ 0.000269] WARNING: Your 'console=ttyO0' has been replaced by 'ttyS0'
[ 0.000276] This ensures that you still see kernel messages. Please
[ 0.000282] update your kernel commandline.
[ 0.000302] Calibrating delay loop... 795.44 BogoMIPS (lpj=3977216)
[ 0.089134] pid_max: default: 32768 minimum: 301
[ 0.089237] Security Framework initialized
[ 0.089293] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
[ 0.089304] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
[ 0.090017] Initializing cgroup subsys blkio
[ 0.090045] Initializing cgroup subsys memory
[ 0.090090] Initializing cgroup subsys devices
[ 0.090105] Initializing cgroup subsys freezer
[ 0.090120] Initializing cgroup subsys perf_event
[ 0.090150] CPU: Testing write buffer coherency: ok
[ 0.090580] Setting up static identity map for 0x80008200 - 0x80008270
[ 0.092245] devtmpfs: initialized
[ 0.102756] VFP support v0.3: implementor 41 architecture 3 part 30 variant c rev 3
[ 0.168837] clocksource jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[ 0.171255] pinctrl core: initialized pinctrl subsystem
[ 0.172584] NET: Registered protocol family 16
[ 0.174928] DMA: preallocated 256 KiB pool for atomic coherent allocations
[ 0.199130] cpuidle: using governor ladder
[ 0.229116] cpuidle: using governor menu
[ 0.233695] OMAP GPIO hardware version 0.1
[ 0.241853] omap-gpmc 50000000.gpmc: could not find pctldev for node /ocp/l4_wkup@44c00000/scm@210000/pinmux@800/gpmc_pins_default, deferring probe
[ 0.243478] No ATAGs?
[ 0.243505] hw-breakpoint: debug architecture 0x4 unsupported.
[ 0.289321] edma 49000000.edma: TI EDMA DMA engine driver
[ 0.292776] vgaarb: loaded
[ 0.293362] SCSI subsystem initialized
[ 0.293889] omap_i2c 4802a000.i2c: could not find pctldev for node /ocp/l4_wkup@44c00000/scm@210000/pinmux@800/i2c1_pins_default, deferring probe
[ 0.294011] media: Linux media interface: v0.10
[ 0.294085] Linux video capture interface: v2.00
[ 0.294136] pps_core: LinuxPPS API ver. 1 registered
[ 0.294145] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[ 0.294174] PTP clock support registered
[ 0.295022] omap-mailbox 480c8000.mailbox: omap mailbox rev 0x400
[ 0.295261] Advanced Linux Sound Architecture Driver Initialized.
[ 0.296131] Switched to clocksource timer1
[ 0.307385] NET: Registered protocol family 2
[ 0.308269] TCP established hash table entries: 2048 (order: 1, 8192 bytes)
[ 0.308305] TCP bind hash table entries: 2048 (order: 1, 8192 bytes)
[ 0.308334] TCP: Hash tables configured (established 2048 bind 2048)
[ 0.308422] UDP hash table entries: 256 (order: 0, 4096 bytes)
[ 0.308442] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
[ 0.308614] NET: Registered protocol family 1
[ 0.309025] RPC: Registered named UNIX socket transport module.
[ 0.309040] RPC: Registered udp transport module.
[ 0.309047] RPC: Registered tcp transport module.
[ 0.309054] RPC: Registered tcp NFSv4.1 backchannel transport module.
[ 0.309983] CPU PMU: Failed to parse /pmu/interrupt-affinity[0]
[ 0.310031] hw perfevents: enabled with armv7_cortex_a8 PMU driver, 5 counters available
[ 0.312084] futex hash table entries: 256 (order: -1, 3072 bytes)
[ 0.312175] audit: initializing netlink subsys (disabled)
[ 0.312242] audit: type=2000 audit(0.290:1): initialized
[ 0.320215] VFS: Disk quotas dquot_6.6.0
[ 0.320438] VFS: Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
[ 0.322774] NFS: Registering the id_resolver key type
[ 0.322856] Key type id_resolver registered
[ 0.322865] Key type id_legacy registered
[ 0.322944] jffs2: version 2.2. (NAND) (SUMMARY) ⓒ 2001-2006 Red Hat, Inc.
[ 0.324841] NET: Registered protocol family 38
[ 0.324906] io scheduler noop registered
[ 0.324919] io scheduler deadline registered
[ 0.324976] io scheduler cfq registered (default)
[ 0.325991] pinctrl-single 44e10800.pinmux: 142 pins at pa f9e10800 size 568
[ 0.329030] Serial: 8250/16550 driver, 10 ports, IRQ sharing enabled
[ 0.332831] 44e09000.serial: ttyS0 at MMIO 0x44e09000 (irq = 158, base_baud = 3000000) is a 8250
[ 0.953139] console [ttyS0] enabled
[ 0.957736] 48022000.serial: ttyS1 at MMIO 0x48022000 (irq = 159, base_baud = 3000000) is a 8250
[ 0.967543] 481a8000.serial: ttyS4 at MMIO 0x481a8000 (irq = 160, base_baud = 3000000) is a 8250
[ 0.977283] 481aa000.serial: ttyS5 at MMIO 0x481aa000 (irq = 161, base_baud = 3000000) is a 8250
[ 0.987160] [drm] Initialized drm 1.1.0 20060810
[ 1.003215] brd: module loaded
[ 1.011830] loop: module loaded
[ 1.015955] mtdoops: mtd device (mtddev=name/number) must be supplied
[ 1.086197] davinci_mdio 4a101000.mdio: davinci mdio revision 1.6
[ 1.092338] libphy: 4a101000.mdio: probed
[ 1.098050] davinci_mdio 4a101000.mdio: phy[0]: device 4a101000.mdio:00, driver TI DP83867
[ 1.106472] davinci_mdio 4a101000.mdio: phy[16]: device 4a101000.mdio:10, driver TI DP83867
[ 1.115609] cpsw 4a100000.ethernet: Detected MACID = b0:d5:cc:c4:ad:89
[ 1.124132] mousedev: PS/2 mouse device common for all mice
[ 1.129942] i2c /dev entries driver
[ 1.134711] omap_hsmmc 47810000.mmc: Got CD GPIO
[ 1.139808] omap_hsmmc 47810000.mmc: unable to obtain RX DMA engine channel 0
[ 1.176566] ledtrig-cpu: registered to indicate activity on CPUs
[ 1.184536] oprofile: using arm/armv7
[ 1.188736] Initializing XFRM netlink socket
[ 1.193074] NET: Registered protocol family 17
[ 1.197664] NET: Registered protocol family 15
[ 1.202256] Key type dns_resolver registered
[ 1.206873] omap_voltage_late_init: Voltage driver support not added
[ 1.213612] /cpus/cpu@0: could not get #voltdm-cells for /ocp/i2c@44e0b000/tps@2d/regulators/regulator@2
[ 1.223245] cpu cpu0: Failed to register cpu0 clock notifier: -22
[ 1.229431] cpufreq-voltdm: probe of cpufreq-voltdm.0 failed with error -22
[ 1.236796] ThumbEE CPU extension supported.
[ 1.241115] Registering SWP/SWPB emulation handler
[ 1.248615] omap-gpmc 50000000.gpmc: GPMC revision 6.0
[ 1.253800] gpmc_mem_init: disabling cs 0 mapped at 0x0-0x1000000
[ 1.261687] omap_i2c 4802a000.i2c: bus 1 rev0.11 at 100 kHz
[ 1.267843] hctosys: unable to open rtc device (rtc0)
[ 1.276819] vbat: disabling
[ 1.279751] ALSA device list:
[ 1.282732] No soundcards found.
[ 1.287468] List of all partitions:
[ 1.291004] 0100 8096 ram0 (driver?)
[ 1.295653] 0101 8096 ram1 (driver?)
[ 1.300498] 0102 8096 ram2 (driver?)
[ 1.305141] 0103 8096 ram3 (driver?)
[ 1.309837] 0104 8096 ram4 (driver?)
[ 1.314480] 0105 8096 ram5 (driver?)
[ 1.319174] 0106 8096 ram6 (driver?)
[ 1.323817] 0107 8096 ram7 (driver?)
[ 1.328497] 0108 8096 ram8 (driver?)
[ 1.333140] 0109 8096 ram9 (driver?)
[ 1.337802] 010a 8096 ram10 (driver?)
[ 1.342531] 010b 8096 ram11 (driver?)
[ 1.347278] 010c 8096 ram12 (driver?)
[ 1.352007] 010d 8096 ram13 (driver?)
[ 1.356753] 010e 8096 ram14 (driver?)
[ 1.361486] 010f 8096 ram15 (driver?)
[ 1.366229] No filesystem could mount root, tried: jffs2
[ 1.371667] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
[ 1.379977] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
[ 82.686140] random: nonblocking pool is initialized
This is u-boot env.
U-Boot# print
arch=arm
args_mmc=run finduuid;setenv bootargs console=${console} ${optargs} root=PARTUUID=${uuid} rw rootfstype=${mmcrootfstype}
baudrate=115200
board=am335x
board_name=my_board
board_rev=unknown
board_serial=unknown
boot_fdt=try
bootcmd=run findfdt; run init_console; run netboot;run spiboot;run mmcboot;setenv mmcdev 1; setenv bootpart 1:2; run mmcboot;
bootcount=900
bootdelay=2
bootdir=/boot
bootenvfile=uEnv.txt
bootfile=zImage
bootm_size=0x10000000
bootpart=0:2
bootscript=echo Running bootscript from mmc${mmcdev} ...; source ${loadaddr}
console=ttyO0,115200n8
cpu=armv7
envboot=mmc dev ${mmcdev}; if mmc rescan; then echo SD/MMC found on device ${mmcdev};if run loadbootscript; then run bootscript;else if run loadbootenv; then echo Loaded env from ${bootenvfile};run importbootenv;fi;if test -n $uenvcmd; then echo Running uenvcmd ...;run uenvcmd;fi;fi;fi;
eth1addr=b0:d5:cc:c4:ad:8b
ethact=cpsw
ethaddr=b0:d5:cc:c4:ad:89
fdt_addr_r=0x88000000
fdtaddr=0x88000000
fdtfile=undefined
findfdt=if test $board_name = A335BONE; then setenv fdtfile am335x-bone.dtb; fi; if test $board_name = A335BNLT; then setenv fdtfile am335x-boneblack.dtb; fi; if test $board_name = A33515BB; then setenv fdtfile am335x-evm.dtb; fi; if test $board_name = A335X_SK; then setenv fdtfile am335x-evmsk.dtb; fi; if test $board_name = A335_ICE; then setenv fdtfile am335x-icev2.dtb; fi; if test $board_name = my_board; then setenv fdtfile am335x-ERTU.dtb; fi; if test $fdtfile = undefined; then echo WARNING: Could not determine device tree to use; fi;
finduuid=part uuid mmc 0:2 uuid
importbootenv=echo Importing environment from mmc${mmcdev} ...; env import -t ${loadaddr} ${filesize}
init_console=if test $board_name = A335_ICE; then setenv console ttyO3,115200n8;else setenv console ttyO0,115200n8;fi;
ipaddr=10.11.22.22
kernel_addr_r=0x82000000
loadaddr=0x82000000
loadbootenv=fatload mmc ${mmcdev} ${loadaddr} ${bootenvfile}
loadbootscript=load mmc ${mmcdev} ${loadaddr} boot.scr
loadfdt=load mmc ${bootpart} ${fdtaddr} ${bootdir}/${fdtfile}
loadimage=load mmc ${bootpart} ${loadaddr} ${bootdir}/${bootfile}
loadramdisk=load mmc ${mmcdev} ${rdaddr} ramdisk.gz
mmcboot=mmc dev ${mmcdev}; if mmc rescan; then echo SD/MMC found on device ${mmcdev};run envboot; if run loadimage; then run mmcloados;fi;fi;
mmcdev=0
mmcloados=run args_mmc; if test ${boot_fdt} = yes || test ${boot_fdt} = try; then if run loadfdt; then bootz ${loadaddr} - ${fdtaddr}; else if test ${boot_fdt} = try; then bootz; else echo WARN: Cannot load the DT; fi; fi; else bootz; fi;
mmcrootfstype=ext4 rootwait
netargs=setenv bootargs console=${console} ${optargs} root=/dev/nfs nfsroot=${serverip}:${rootpath},${nfsopts} rw ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}:eth0:off
netboot=echo Booting from network ...; setenv autoload no; run netloadimage; run findfdt; run netloadfdt; run netargs; bootz ${loadaddr} - ${fdtaddr}
netloadfdt=tftp ${fdtaddr} ${fdtfile}
netloadimage=tftp ${loadaddr} ${bootfile}
netmask=255.255.255.0
nfsopts=nolock
partitions=uuid_disk=${uuid_gpt_disk};name=rootfs,start=2MiB,size=-,uuid=${uuid_gpt_rootfs}
ramargs=setenv bootargs console=${console} ${optargs} root=${ramroot} rootfstype=${ramrootfstype}
ramboot=echo Booting from ramdisk ...; run ramargs; bootz ${loadaddr} ${rdaddr} ${fdtaddr}
ramdisk_addr_r=0x88080000
ramroot=/dev/ram0 rw
ramrootfstype=ext2
rdaddr=0x88080000
rootpath=/home/ghlee/ti-processor-sdk/targetFS
serverip=10.11.22.33
soc=am33xx
spiargs=setenv bootargs console=${console} ${optargs} root=${spiroot} rootfstype=${spirootfstype}
spiboot=echo Booting from spi ...; run spiargs; sf probe ${spibusno}:0; sf read ${loadaddr} ${spisrcaddr} ${spiimgsize}; sf read ${fdtaddr} ${spifdtaddr} ${spifdtsize}; bootz ${loadaddr} - ${fdtaddr}
spiboot_mmcfs=setenv spiargs setenv bootargs console=${console} ${optargs} root=PARTUUID=${uuid} rw rootfstype=${mmcrootfstype}
spiboot_mmcroot=PARTUUID=${uuid} rw
spiboot_mmcrootfstype=${mmcrootfstype}
spibusno=0
spifdtaddr=0x80000
spifdtsize=0xf000
spiimgsize=0x362000
spiroot=/dev/mtdblock4 rw
spirootfstype=jffs2
spisrcaddr=0xe0000
static_ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}:eth0:off
stderr=serial_omap
stdin=serial_omap
stdout=serial_omap
usbnet_devaddr=b0:d5:cc:c4:ad:8b
vendor=ti
ver=U-Boot 2015.07 (Mar 03 2017 - 18:39:01 +0900)
Finally, spi area in dts file
&spi0 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&spi0_pins_default>;
spi-flash@0,0 {
compatible = "m25p80";
spi-max-frequency = <24000000>;
reg = <0>;
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "NOR.MLO.byteswap";
reg = <0x00000000 0x00020000>;
read-only;
};
partition@1 {
label = "NOR.u-boot.img";
reg = <0x00020000 0x00060000>;
read-only;
};
partition@2 {
label = "NOR.fdt";
reg = <0x00080000 0x00020000>;
read-only;
};
partition@3 {
label = "NOR.1st u-boot-env";
reg = <0x000a0000 0x00020000>;
};
partition@4 {
label = "NOR.2nd u-boot-env";
reg = <0x000c0000 0x00020000>;
};
partition@5 {
label = "NOR.linux kernel";
reg = <0x000e0000 0x00340000>;
read-only;
};
partition@6 {
label = "NOR.file-system";
reg = <0x00440000 0x03bc0000>;
};
};
};