如何使BeagleBone SD卡启动时不再分区

如何使BeagleBone SD卡启动时不再分区,第1张

bbb板子上自带2G eMMC, 但是对很多应用来说, 容量还是远远不够, 于是我想用sd卡扩展空间, 但是发现一插入sd卡, 板子就启动不了啦, 去google了一下原因, 原来bbb的原生系统所带的uboot启动的时候如果发现有sd卡, 则sd卡会变成mmc0, eMMC则变成mmc1, 导致启动失败, 于是搜了很多资料, 努力了一个晚上终于搞定这个问题
首先你需要一张microSD卡, 一个读卡器, 我用的是笔记本自带的, 启动ubuntu(或者别的linux系统, windows不行), 把sd卡插进读卡器里, 输入
fdisk -l
查看一下当前sd卡设备的名称, 我的是mmcblk0, 于是
fdisk /dev/mmcblk0
进行分区, 使用命令 d 删除sd卡上目前存在的所有分区, 使用n 命令分别创建2个分区, 第一个小一点的, 大概几十m就可以了, 用作启动区, 第二个分区就是剩下的所有空间, 最后输入w命令写入分区表, 如果不熟悉fdisk命令的话可以去找百度看一下
接下来使用mkfs命令分别格式化两个分区:
mkfs -t vfat -F 16 -n boot /dev/mmcblk0p1
mkfs -V -t ext4 -j -L data /dev/mmcblk0p2
两个分区命名为boot 跟 data, 第一个是fat16格式的, 第二个是ext4格式的, 接下来挂载第一个分区到根目录下, 并在上面创建一个文件uEnvtxt , 将下面几行内容写进去:
mmcdev=1
bootpart=1:2
mmcroot=/dev/mmcblk1p2 ro
optargs=quiet
保存后umount, 把sd卡拿出来, 插到BBB板子上, 最后上电, 启动成功!!
我刚开始的时候只是google到uEnvtxt以及它的内容, 没有注意使用fdisk以及mkfs制作启动sd卡, 插进BBB板子后启动失败, 看串口调试信息显示:
Bad partition specification mmc 1:2
于是查了半天终于发现是sd卡的分区不对, 用以上方法制作成功后, 串口观察启动过程:
U-Boot SPL 201304-dirty (Jun 19 2013 - 09:57:14)
musb-hdrc: ConfigData=0xde (UTMI-8, dyn FIFOs, HB-ISO Rx, HB-ISO Tx, SoftConn)
musb-hdrc: MHDRC RTL version 20
musb-hdrc: setup fifo_mode 4
musb-hdrc: 28/31 max ep, 16384/16384 memory
USB Peripheral mode controller at 47401000 using PIO, IRQ 0
musb-hdrc: ConfigData=0xde (UTMI-8, dyn FIFOs, HB-ISO Rx, HB-ISO Tx, SoftConn)
musb-hdrc: MHDRC RTL version 20
musb-hdrc: setup fifo_mode 4
musb-hdrc: 28/31 max ep, 16384/16384 memory
USB Host mode controller at 47401800 using PIO, IRQ 0
OMAP SD/MMC: 0
mmc_send_cmd : timeout: No status update
reading u-bootimg
reading u-bootimg
U-Boot 201304-dirty (Jun 19 2013 - 09:57:14)
I2C: ready
DRAM: 512 MiB
WARNING: Caches not enabled
NAND: No NAND device found!!!
0 MiB
MMC: OMAP SD/MMC: 0, OMAP SD/MMC: 1
Warning - readenv() failed, using default environment
musb-hdrc: ConfigData=0xde (UTMI-8, dyn FIFOs, HB-ISO Rx, HB-ISO Tx, SoftConn)
musb-hdrc: MHDRC RTL version 20
musb-hdrc: setup fifo_mode 4
musb-hdrc: 28/31 max ep, 16384/16384 memory
USB Peripheral mode controller at 47401000 using PIO, IRQ 0
musb-hdrc: ConfigData=0xde (UTMI-8, dyn FIFOs, HB-ISO Rx, HB-ISO Tx, SoftConn)
musb-hdrc: MHDRC RTL version 20
musb-hdrc: setup fifo_mode 4
musb-hdrc: 28/31 max ep, 16384/16384 memory
USB Host mode controller at 47401800 using PIO, IRQ 0
Net: <ethaddr> not set Validating first E-fuse MAC
cpsw, usb_ether
Hit any key to stop autoboot: 1 0
gpio: pin 53 (gpio 53) value is 1
mmc0 is current device
micro SD card found
mmc0 is current device
gpio: pin 54 (gpio 54) value is 1
SD/MMC found on device 0
reading uEnvtxt
62 bytes read in 2 ms (303 KiB/s)
Loaded environment from uEnvtxt
Importing environment from mmc
gpio: pin 55 (gpio 55) value is 1
mmc_send_cmd : timeout: No status update
4270840 bytes read in 746 ms (55 MiB/s)
gpio: pin 56 (gpio 56) value is 1
24129 bytes read in 51 ms (4619 KiB/s)
Booting from mmc
## Booting kernel from Legacy Image at 80007fc0
Image Name: Angstrom/3813/beaglebone
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 4270776 Bytes = 41 MiB
Load Address: 80008000
Entry Point: 80008000
Verifying Checksum OK
## Flattened Device Tree blob at 80f80000
Booting using the fdt blob at 0x80f80000
XIP Kernel Image OK
OK
Using Device Tree in place at 80f80000, end 80f88e40
Starting kernel
Uncompressing Linux done, booting the kernel
[ 0194032] omap2_mbox_probe: platform not supported
[ 0204621] tps65217-bl tps65217-bl: no platform data provided
[ 0281250] bone-capemgr bone_capemgr8: slot #0: No cape found
[ 0318357] bone-capemgr bone_capemgr8: slot #1: No cape found
[ 0355465] bone-capemgr bone_capemgr8: slot #2: No cape found
[ 0392574] bone-capemgr bone_capemgr8: slot #3: No cape found
[ 0412614] bone-capemgr bone_capemgr8: slot #6: BB-BONELT-HDMIN conflict P845 (#5:BB-BONELT-HDMI)
[ 0422237] bone-capemgr bone_capemgr8: slot #6: Failed verification
[ 0429015] bone-capemgr bone_capemgr8: loader: failed to load slot-6 BB-BONELT-HDMIN:00A0 (prio 2)
[ 0451672] omap_hsmmc mmc4: of_parse_phandle_with_args of 'reset' failed
[ 0516043] pinctrl-single 44e10800pinmux: pin 44e10854 already requested by 44e10800pinmux; cannot claim for gpio-leds7
[ 0527764] pinctrl-single 44e10800pinmux: pin-21 (gpio-leds7) status -22
[ 0535082] pinctrl-single 44e10800pinmux: could not request pin 21 on device pinctrl-single
[ 6375621] libphy: PHY 4a101000mdio:01 not found
[ 6380726] net eth0: phy 4a101000mdio:01 not found on slave 1
systemd-fsck[85]: Angstrom: clean, 50623/112672 files, 325594/449820 blocks
---O---
| | - o o
| | |---------------| | --------------
| | | __ | ---'| '--| -'| | |
| | | | | |--- || --'| | | ' | | | |
'---'---'--'--'-- |-----''----''--' '-----'-'-'-'
-' |
'---'
The Angstrom Distribution beaglebone ttyO0
Angstrom v201212 - Kernel 3813
beaglebone login:
红字就是读sd卡配置环境文件uEnvtxt的过程, 因为插入sd卡后设备号有变动, 因此实际上这个方法是把root重新定义了回去, 使得系统能正确找到zImage的位置

1、下载DiskGenius软件,安装,安装后如图,双击打开,将SD卡装在读卡器上,插上电脑。

2、打开后找到SD卡,如图有7个分区,注意一定要看清楚,电脑硬盘也是有分区的,不要误删到电脑硬盘分区。

3、如图,在SD卡名称上,右击,在子菜单内找到删除所有分区,点击删除所有分区。

4、然后根据提示,选择是,删除所有分区,删除后SD卡显示总内存,如图,找到保存更改,点击保存更改。

5、SD卡删除完所有分区后是不能使用的,必须新建分区,如图,找到快速分区,点击快速分区。

6、如图,选择分区数量,可以自定义,然后设置每个分区的内存大小,设置完选择确定。

7、如果只是简单的存储数据,可以设置为一个分区,如图,然后将类型设为FT32。

可以在电脑里直接将SD卡格式化:

将SD卡通过读卡器与电脑连接好,让电脑可以识别到SD卡。

打开资源管理器,找到SD卡的盘符,选中并右击鼠标,然后选"格式化"选项。

在d出的格式化窗口上,可以选择文件系统类型,然后点击“确定”按钮。

等待几秒钟,格式化就完成了。

手机ROM相当于PC上的硬盘,用于存储手机 *** 作系统和软件,也叫FLASH ROM,决定手机存储空间的大小。手机RAM相当于PC的内存,其大小决定手机的运行速度。
要把大象装冰箱里总共分三步,而Android系统中把软件安装到SD卡上,比这还简单,两步就够了:
一、存储卡分区
首先我们需要对手机SD卡进行分区,分一个FAT32分区和一个Ext3分区,FAT32分区用于正常存储、音乐、视频等资料,而Linux格式的Ext3分区就是用于扩容安装软件的分区。以笔者的2G SD卡为例,FAT32分区135GB,Ext3分区494MB。下载并安装Acronis Disk Director Suite软件。将手机SD卡装入读卡器并连接电脑,然后运行Acronis Disk Director Suite软件。
1FAT32分区。找到代表SD卡的磁盘分区,点击右键,选择“删除”命令,删除已有分区。当成为“未分配”分区时,点击右键,选择“创建分区”,在d出的对话框中,文件系统选择:FAT32,创建为“主分区”,设置好分区大小135GB,点击确定按钮。
2.Ext3分区。在剩余的494MB分区上,点击右键,选择“创建分区”,在d出的对话框中,文件系统选择:Ext3,创建为“主分区”,设置好分区大小494MB,点击确定按钮。
3确认分区。上述分区设定完成后,软件只是记录了分区 *** 作,并没有真正在SD卡上进行分区。点击软件工具栏中的“提交”按钮,确认执行分区 *** 作,提示“ *** 作成功完成”说明分区成功了。
二、将软件移动到SD卡
存储卡分区完成后我们只需要把系统默认的软件安装目录/data/app转移到SD卡的Ext3分区上,然后通过ln命令建立软链接,使系统自动把软件安装到SD卡上,达到节省手机内存空间的目的。
将存储卡装回手机,重新启动,使系统识别到Ext3分区。在手机上运行超级终端,依次输入以下命令来验证系统是否识别了Ext3分区:
su (会提示高级权限授权,选择“总是同意”)
busybox df –h
如果显示的列表中有/dev/block/mmcblk0p2的信息说明系统已成功识别了Ext3分区。
然后依次输入以下命令将/data/app目录转移到SD卡的Ext3分区:
cp –a /data/app /system/sd/
(将/data/app目录复制到/system/sd/下)
rm –r /data/app
(删除/data/app目录)
ln –s /system/sd/app /data/app
(建立软链接)
Reboot
(重启手机)
重启之后,手机上安装的所有软件就全部转移到了SD卡上,看看你的手机可用空间是不是增大了。以后再安装软件也是直接安装到SD卡上,不用担心空间不足的问题了,而且这样做还有一个好处,刷新ROM后,以前安装过的软件并没有被清除,还保存在SD卡上,输入下列命令就可以轻松恢复,不用再一一安装了,非常方便实用。
su
(取得高级权限)
cd /data
(进入/data目录)
cp –a app /system/sd/app
(将app目录中的内容复制到/system/sd/app目录)
rm –r app
(删除app目录)
ln –s /system/sd/app /data/app
(建立软链接)
reboot
(重新启动)
扩容效果体验:
刷新ROM后未安装任何软件,手机可用空间为87MB,安装若干软件后,可用空间下降为73MB。将软件目录转移到SD卡上后,可用空间变为80MB。可能有的“电筒”会有疑惑,为什么没恢复到87MB呢?这是因为我们只是将软件移动到了SD卡上,而软件的缓存数据仍然会占用手机内存,所以手机内存还是会下降。当然软件的缓存数据也可以移动到SD卡上,但这样会拖慢软件运行速度,所以不推荐大家使用。
注意事项:
1软件移动到SD卡上后,原有的部分桌面插件会无法正常显示,删除后,重新加入桌面即可。
2SD卡的Ext3分区可以视为手机硬件的一部分,移除SD卡后,安装的软件将无法运行。插入SD卡,重新启动手机即可正常使用。
这个教程有哪个高手可以成功的话,给我说一声哦!


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13212435.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-06-21
下一篇 2023-06-21

发表评论

登录后才能评论

评论列表(0条)

保存