RISC-V技术论坛
直播中

dutong0321

3年用户 688经验值
擅长:模拟技术 嵌入式技术 接口/总线/驱动 光电显示 控制/MCU RF/无线
私信 关注
[经验]

【Milk-V Duo 开发板免费体验】TF扩容

起因

开发板正式进入系统后,然后通过SSH的方案登录进入,进入以后,使用df -h命令查看,会发现ROOTFS的容量仅仅只有245.9MB,而我们的boot分区的容量也不过128MB,那么我的TF卡一共32GB,剩下的容量哪里去了?其实经常玩树莓派的人肯定都知道,这个其实是在打包IMG的时候,为了适应更多的TF卡所以都按照小容量的TF卡打包的,那么对于我们的大容量TF卡就没有解决办法了么?也不是,可以在编译好系统以后进行打包时,按照自己的TF卡容量进行打包,另外就是像树莓派有一个工具叫做raspi-config,使用这个命令也可以扩容,而且很方便,当然了我们的板子时不可能有这个命令的,那么还有别的办法么?

解决

当然是有办法的啦,使用fdisk和resize2fs就可以解决,不过在这里重要提示一下,我的32GB不能全部扩容到ROOTFS分区,如果全部扩容的话会出问题,所以,我扩容了16GB,剩下的16GB也没有浪费啦,在官方社区里,也有关于扩容方面的帖子,原理和我的都一样,但是我没有参考他的,大家如果看懂我的看我的,看懂他的看他的,[Duo]Linux 使用fdisk和resize2fs扩容 root分区!但是我为了演示方便,我重新找了一块128GB的TF卡,重新进行一遍操作。

fdisk /dev/mmcblk0

001.png

fdisk的命令都会吧,不会可以输入h回车,也可以直接按照我的步骤来,我会说一下我的理解,然后输入p回车,列出当前的分区。
002.png

可以看到118GB的内存卡,1个Sectors512个字节,然后输入d回车,输入2回车,意思就是删除第2个分区,然后输入p回车,列出当前分区。
003.png

现在只剩1个分区了,接下来输入n回车,输入p回车,输入2回车,直接回车,然后输入2359296回车,最后再输入p回车。

n代表新建一个分区,p代表新建的是主分区,2代表的是分区号,这个地方直接回车是使用了默认值,即上个分区的最后一个Sector+1,最后输入的2359296代表的是本分区的最后一个Sector,可以看到我刚好分了1024MB,计算方法其实很简单2x1024x1024+262144,注意最后一个Sector不能大于硬盘的最后一个Sector,还有就是在板上不能太大,比如32GB建议最多分上16GB就可以了。
004.png

那么剩下的16GB也不要浪费了,我们再新建一个分区。我这里最后的分区没有进行分配,如果32GB的卡的话,可以输入n回车,输入p回车,输入3回车,直接回车,再直接回车,最后再输入p回车,也就是说最后2个直接默认选项就可以。我分配的是2GB分区。
005.png

最后输入w进行写入,写入以后会报错,表示资源占用,不过没关系,问题不大,我们先输入reboot让板子重启一下再说。
006.png

重启后,先用resize2fs进行扩容。
007.png

扩容以后,就是我们要使用剩余空间的时候了,在这里要感谢论坛里的这个帖子,我是按照这个帖子进行的,官方固件下USB device简单配置,但是,大神里面有一些小的疏忽,可以参照我的进行。

其实就是把/mnt/system/rndis.sh文件中的

/etc/run_usb.sh probe rndis >> /tmp/rndis.log 2>&1

后增加一行

/etc/run_usb.sh probe msc /dev/mmcblk0p3

这个代表要把第3个分区从USB上面进行读取,如果是希望把整个TF卡都挂上去也是可以的,把最后的p3删掉就可以,不过我不喜欢,因为第2个分区老提示格式化。

修改后的文件如下:

#!/bin/sh

/etc/uhubon.sh device >> /tmp/rndis.log 2>&1
/etc/run_usb.sh probe rndis >> /tmp/rndis.log 2>&1
/etc/run_usb.sh probe msc /dev/mmcblk0p3
/etc/run_usb.sh start rndis >> /tmp/rndis.log 2>&1

sleep 0.5
ifconfig usb0 192.168.42.1

count=`ps | grep dnsmasq | grep -v grep | wc -l`
if [ ${count} -lt 1 ] ;then
  echo "/etc/init.d/S80dnsmasq start" >> /tmp/rndis.log 2>&1
  /etc/init.d/S80dnsmasq start >> /tmp/rndis.log 2>&1
fi

然后,再次输入reboot进行重启。

重启后,电脑就会出现弹窗了。
009.png

注意,如果是挂载的整块TF千万别瞎点,如果是完全按照我的来的,只挂载第3个分区,那就直接点击格式化磁盘,或者进入我的电脑或者磁盘管理里进行格式化也是可以的,我这里为了兼容性直接使用了FAT32了,如下所示。
010.png

格式化就完事了,现在就没有浪费空间了,值得一提的是,这个方法是完全在Linux下进行的分区操作,当然我们可以在分了第2个分区以后,就不再继续分区,而是使用读卡器,或者挂载整个TF卡到windows系统下,然后在windows系统里,使用磁盘管理或DG一类的软件继续分区也是可以的。

最后,我们要把这个分区做到windows系统和Linux系统进行打通。首先,我们windows系统已经没有问题了,往里扔一个文件,文件名不要有中文,不然全是问号,编码有问题的,但是文件里面有中文是无妨的。

然后,在Linux里面进行挂载,

mkdir /mnt/media
mount /dev/mmcblk0p3 /mnt/media/

011.png

相信我,这样传输文件比scp还爽,虽然我还是更喜欢scp。

对了,值得注意的是,只可以windows里可读可写,但是在Linux里只可以读,包括修改都要复制到其他地方进行修改,不然不但无法保存还得重新加载。

还有就是,这样每次打开以后都得重新挂载,我们让他自动挂载吧。vi /etc/fstab,在文件末尾添加一行:

/dev/mmcblk0p3  /mnt/media      vfat    defaults        0       0

这个其实也没啥说的,唯一注意的是我用的fat32格式,所以第3个位置是vfat即可!
012.png

最后,reboot一下看看挂载成功没?
013.png

更多回帖

发帖
×
20
完善资料,
赚取积分