嵌入式开发者社区
标题: 如何指定emmc的设备名为/dev/mmcblk0 [打印本页]
作者: wgy504 时间: 2017-5-23 13:21
标题: 如何指定emmc的设备名为/dev/mmcblk0
我是在使用bbb板子,内核是3.8.13。遇到问题的现象是:sd卡和emmc要同时使用,但是文件系统要放在emmc中。这样,我起初设计环境变量uEnv.txt是“mmcroot=/dev/mmcblk1p2 ro”,但是当sd卡出了问题的时候,或者忘记插卡的时候,板子重新启动就无法找到文件系统啦!
我现在处理这个问题的思路是:修改设备树《am33xx.dtsi》:
aliases {
serial0 = &uart1;
serial1 = &uart2;
serial2 = &uart3;
serial3 = &uart4;
serial4 = &uart5;
serial5 = &uart6;
mmc0 = &mmc2; //这两项是我后加上的
mmc1 = &mmc1; //
};
。。。。。。
mmc2: mmc@481d8000 {
compatible = "ti,omap3-hsmmc";
ti,hwmods = "mmc2";
ti,needs-special-reset;
ti,needs-special-hs-handling;
dmas = <&edma 2
&edma 3>;
dma-names = "tx", "rx";
status = "disabled";
};
mmc1: mmc@48060000 {
compatible = "ti,omap3-hsmmc";
ti,hwmods = "mmc1";
ti,dual-volt;
ti,needs-special-reset;
ti,needs-special-hs-handling;
dmas = <&edma 24
&edma 25>;
dma-names = "tx", "rx";
status = "disabled";
};
mmc3: mmc@47810000 {
compatible = "ti,omap3-hsmmc";
ti,hwmods = "mmc3";
ti,needs-special-reset;
ti,needs-special-hs-handling;
status = "disabled";
}; 我的目的是想让系统启动后,把emmc注册为/dev/mmcblk0设备,这样我就可以把环境变量uEnv.txt设置为“mmcroot=/dev/mmcblk0p2 ro”,不管设备有没有检测到sd卡,emmc的设备名称都不会被修改,就可以解决这个问题了。
但是我这么修改之后,重新编译内核及设备树,替换了板子中相关的zImage和am335x-boneblack.dtb文件后,板子重新上电(板子有sd卡),emmc设备名还是/dev/mmcblk1。
请问,我怎么修改才可以保证不管设备有没有检测到sd卡,emmc的设备名称都不会被修改啊???
作者: human 时间: 2017-5-23 18:04
创龙的AM335x开发板就可以把文件系统固化到eMMC
作者: wgy504 时间: 2017-5-23 18:07
我知道,我也已经把文件系统固化到了emmc中了,你仔细看看我的问题。谢谢,
作者: vefone 时间: 2017-5-24 00:15
uboot中默认应该是找不到sd卡的文件系统,自动切换挂载emmc的文件系统。我们使用比较新的uboot(2016-05)和内核(4.4.12),不会存在上述问题。按楼主的思路,改动起来会有点大。我们这边也没办法帮忙验证
作者: wgy504 时间: 2017-5-24 08:58
谢谢您提供的思路,我刚才移植了uboot(2016-05)和内核(4.4.12)及sdk中的文件系统,我想请教您,uboot中的哪部分代码实现了您说的那样“uboot中默认应该是找不到sd卡的文件系统,自动切换挂载emmc的文件系统。”,多谢啦!比较着急,新版本的uboot没有深入研究过。
作者: wgy504 时间: 2017-5-24 09:55
我把新的uboot,内核及新的文件系统下载到sd卡中了,从sd卡启动,系统可以正常启动。但是我按照你说的意思测试了一下,把这个文件系统放在了emmc中,删除了sd卡里的第二个分区的文件系统,系统并没有向你说的那样,检测不到sd卡里的文件系统就从emmc的文件系统启动啊!
下面是从串口打印出来的启动信息
U-Boot SPL 2016.05-00230-g120a8a3-dirty (May 10 2017 - 12:55:37)
Trying to boot from MMC1
reading args
spl_load_image_fat_os: error reading image args, err - -1
reading u-boot.img
reading u-boot.img
reading u-boot.img
reading u-boot.img
U-Boot 2016.05-00230-g120a8a3-dirty (May 10 2017 - 12:55:37 +0800)
Watchdog enabled
I2C: ready
DRAM: 512 MiB
NAND: 0 MiB
MMC: OMAP SD/MMC: 0, OMAP SD/MMC: 1
reading uboot.env
** Unable to read "uboot.env" from mmc0:1 **
Using default environment
<ethaddr> not set. Validating first E-fuse MAC
Net: eth0: ethernet@4a100000
Warning: usb_ether MAC addresses don't match:
Address in SROM is de:ad:be:ef:00:01
Address in environment is 50:72:24:b7:2e:17
, eth1: usb_ether
Press SPACE to abort autoboot in 2 seconds
switch to partitions #0, OK
mmc0 is current device
SD/MMC found on device 0
reading boot.scr
** Unable to read file boot.scr **
reading uEnv.txt
** Unable to read file uEnv.txt **
switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:1...
reading /am335x-boneblack.dtb
36841 bytes read in 11 ms (3.2 MiB/s)
switch to partitions #0, OK
mmc0 is current device
SD/MMC found on device 0
switch to partitions #0, OK
mmc0 is current device
SD/MMC found on device 0
reading boot.scr
** Unable to read file boot.scr **
reading uEnv.txt
** Unable to read file uEnv.txt **
** File not found /boot/zImage **
switch to partitions #0, OK
mmc1(part 0) is current device
Scanning mmc 1:1...
switch to partitions #0, OK
mmc1(part 0) is current device
SD/MMC found on device 1
switch to partitions #0, OK
mmc1(part 0) is current device
SD/MMC found on device 1
reading boot.scr
** Unable to read file boot.scr **
reading uEnv.txt
26 bytes read in 4 ms (5.9 KiB/s)
Loaded env from uEnv.txt
Importing environment from mmc1 ...
3664216 bytes read in 231 ms (15.1 MiB/s)
36841 bytes read in 52 ms (691.4 KiB/s)
Kernel image @ 0x82000000 [ 0x000000 - 0x37e958 ]
## Flattened Device Tree blob at 88000000
Booting using the fdt blob at 0x88000000
Loading Device Tree to 8fff4000, end 8fffffe8 ... OK
Starting kernel ...
[ 0.000377] clocksource_probe: no matching clocksources found
[ 0.000555] WARNING: Your 'console=ttyO0' has been replaced by 'ttyS0'
[ 0.000560] This ensures that you still see kernel messages. Please
[ 0.000565] update your kernel commandline.
[ 0.554364] omap_voltage_late_init: Voltage driver support not added
[ 0.785565] Kernel panic - not syncing: No working init found. Try passing init= option to kernel. See Linux Documentation/init.txt for guidance.
[ 0.798767] ---[ end Kernel panic - not syncing: No working init found. Try passing init= option to kernel. See Linux Documentation/init.txt for guidance.
一直卡在这里了
作者: vefone 时间: 2017-5-24 21:47
你的uboot环境参数有问题
作者: wgy504 时间: 2017-5-25 09:18
谢谢回复,那应该设置成什么样的参数,才能保证“不管有没有sd卡,系统都能可以正确的找到文件系统啊?”因为现在系统里有sd卡和没有sd卡,emmc的设备号就像我问题中描述的那样是不一样的!(有sd的时候,sd的设备号是/dev/mmcblk0,emmc是/dev/mmcblk1; 没有sd的时候,emmc的设备是/dev/mmcblk0)
作者: wgy504 时间: 2017-6-18 17:07
暂时没有找到从根本上解决这个问题的方法:现在的处理办法是:将sd卡分成两个分区,在第一个分区中把环境变量文件uEnv.txt制定文件系统挂载路径为/dev/mmcblk1p2,同时,在emmc的启动分区中也有一个环境变量/dev/mmcblk0p2。这样如果有sd卡,就到/dev/mmcblk1p2(emmc)中读取文件系统;如果没有sd卡就到/dev/mmcblk0p2(emmc)中读取文件系统。
但是还没有找到根本性的解决这个问题:
我认为应该想办法把emmc的设备名改为/dev/mmcblk0,这样不管有没有sd卡,都会正确地去emmc中读取文件系统了。
我在创龙的板子上也做了实验,如果插一张空的卡就一直停在starting kernel,也是启动不了内核和文件系统的。。。
希望有知道的高手看到帖子后能够给点建议
作者: vefone 时间: 2017-8-10 23:24
固定节点名,需要修改内核mmc底层驱动
欢迎光临 嵌入式开发者社区 (https://51dsp.net/) |
Powered by Discuz! X3.4 |