本帖最后由 仰望星空之云 于 2021-10-11 18:52 编辑
笔者使用的是 正点原子的 阿尔法开发板(EMMC版本) 来操作。
以下操作,仅作为参考。
操作思路:
先制作SD系统启动卡,然后SD卡插到开发板里,开发板从SD卡启动,目的就是启动SD卡里的系统,然后就手动操作,将EMMC进行分区,EMMC分区好以后,就进行格式化操作。
EMMC分区格式化好以后,如何验证分区成功了呢,这里我就将EMMC分2个区,其中1分区放内核+设备树(启动文件),2分区放文件系统,这些文件放好以后,开发板从EMMC启动看看,能启动的话,说明OK了。
这里注意,大家要准备好一个文件系统,并打包好,咱们后面可以将这个文件系统压缩包解压到EMMC的2分区中。
下面开始操作吧。
一、手动卸载EMMC分区挂载点按照《【正点原子】I.MX6U用户快速体验V1.8》的2.2小节先自己制作SD系统启动卡(也就是SD卡分好区,并有启动文件和文件系统)。
制作好SD启动卡以后,SD卡插入开发板,拨码开关设置为SD卡启动,然后从SD卡启动开发板进入文件系统。
进入linux文件系统以后,执行指令df看看设备挂载情况,其中/run/media/mmcblk1p2和/run/media/mmcblk1p1是EMMC设备的挂载点,/run/media/mmcblk0p1和/run/media/mmcblk0p2是SD卡设备的挂载点, 因为我用的开发板出厂系统已经烧录到EMMC里了,也就是默认EMMC已经分好区了,所以可以看到/run/media/mmcblk1p2和/run/media/mmcblk1p1。因为现在是SD卡启动,也就是此时开发板的Linux系统运行的是SD卡里的, 即系统正在使用中,所以执行df指令后,可以看到/run/media/mmcblk0p1,看不到/run/media/mmcblk0p2。 执行df指令后,我们先将EMMC设备进行卸载(这个是出厂系统默认的分区,先卸载了再自己重新划分分区)。
执行以下指令: df umount /run/media/mmcblk1p2 // 卸载EMMC的1分区 umount /run/media/mmcblk1p1 // 卸载EMMC的2分区
二、分区操作
卸载完成以后,就可以对EMMC设备进行重新分区了,EMMC设备是/dev/mmcblk1 分区操作的指令是fdisk,执行如下指令:
fdisk /dev/mmcblk1
输入m查看指令使用方法,输入p查看分区情况,输入p以后可以看到EMMC显示7.3GB接近8GB了(阿尔法的EMMC是8GB的)
输入d删除分区,然后选择删除分区1,再输入p查看分区情况,查看只剩下2分区了,再输入d就将剩下的2分区删除了
现在开始新增分区: 输入“n”创建一个新分区。通过选择'p'使其为主,使用默认分区号 1 和第一个扇区 2048。设置最后一个扇区,也就是设置第一个分区的大小,一般设置 500M 足够了, 通过输入“+ 500M”,为该分区预留 500MB,然后输入“t”,然后输入“c”,设置为“W95FAT32 (LBA)”,输入“a”,设为引导分区,指令输入顺序:
n----p----1----空格----+500M-----p---t---c---a
然后顺利新增第一个分区,大小是500MB,此分区用于存放启动镜像(内核、设备树):
接下来新增第二个分区,后面一路默认就可以了,添加了第二个分区以后,输入p可以查看分区情况,确认无误了,再输入w以写入到EMMC里并退出,第二个分区用于存放文件系统:
以上只是创建了两个分区,如果自己想多创建几个分区的,可自己划分每个分区的大小。上面创建第二个分区的时候没有自己设置分区的大小,而是把剩下的空间留给了地热个分区(大概6.8GB)
三、格式化分区完成了分区创建后,就可以格式化分区了。第一个分区我们存放启动镜像,要格式化为fat32格式,第二个分区我们存放文件系统,格式化为ext3格式。 自己创建了几个分区,每个分区用来放什么,自己根据自己的需求来格式化分区。 在终端输入如下命令:
mkfs.vfat /dev/mmcblk1p1 // EMMC的1分区(启动镜像) mkfs.ext3 /dev/mmcblk1p2 // EMMC的2分区(文件系统)
四、拷贝镜像文件到分区里
最后验证是否手动创建分区成功,将启动镜像文件拷贝到EMMC的1分区,将文件系统解压到EMMC的2分区(SD卡里我已经有这些文件了)。 SD卡插到开发板并从SD卡启动后, /run/media/mmcblk0p1就是SD卡里的启动分区,存放的是内核和设备树文件。下面讲解怎么操作。
先挂载EMMC的2分区到/run/media/mmcblk1p2下(没有这个文件的话那就手动创建,设备是挂载后才可以进行读写操作) 同理,也将EMMC的1分区挂载到/run/media/mmcblk1p1下,挂载操作类似。指令如下图: PS:如果没有/run/media/mmcblk1p1和/run/media/mmcblk1p2,自己手动新建,如果有这些目录,自己就不需要新建了,新建的指令如下: mkdir /run/media/mmcblk1p1 mkdir /run/media/mmcblk1p2 新建好以上的目录后,执行如下指令将EMMC的1设备/dev/mmcblk1p1挂载到/run/media/mmcblk1p1下,将EMMC的2设备/dev/mmcblk1p2挂载到/run/media/mmcblk1p2下, 设备挂载后我们才可以进行读写访问,这个操作就类比与U盘插到windows下以后显示一个“U盘”设备后,咱们才可以往U盘里拷贝文件,类似这个操作吧。 执行如下指令进行挂载: mount /dev/mmcblk1p1 /run/media/mmcblk1p1 ///dev/mmcblk1p1挂载到/run/media/mmcblk1p1 mount /dev/mmcblk1p2 /run/media/mmcblk1p2 ///dev/mmcblk1p2挂载到/run/media/mmcblk1p2
将 /run/media/mmcblk0p1的所有文件拷贝到/run/media/mmcblk1p1,其实也就是将SD卡的1分区的 内核+设备树 拷贝一份到EMMC的1分区中。 EMMC的二分区就是放文件系统,大家可以先准备好一个文件系统,也就是要放到EMMC的2分区的文件系统,这个文件系统呢,笔者推荐先把他打包(压缩)好, 然后可以拷贝到U盘里,U盘插到开发板上以后再通过U盘里将其解压到EMM2的2分区中,或者可以直接拷贝文件系统压缩包到SD卡的2分区里,到时候直接从文件系统中解压到EMMC的2分区里。 大家可以把按照教程提到的打包方式去打包一个文件系统:
这里呢,我在SD卡的文件系统里提前放了ubuntu_rootfs-alientek-emmc.tar.bz2这个压缩包,这个是按照教程移植的ubuntu文件系统,我提前打包好了,且放到了SD卡文件系统中了。 所以我可以直接执行以下指令: cp -rf /run/media/mmcblk0p1/* /run/media/mmcblk1p1 //将SD卡1分区的内核+设备树拷贝到EMMC的1分区
cd / // 回到SD卡文件系统的/目录,因为我在/目录下已经提前放好了打包好的文件系统
tar -vxf ubuntu_rootfs-alientek-emmc.tar.bz2 -C /run/media/mmcblk1p2 //将打包好的文件系统解压到EMMC的2分区
五、启动开发板
解压完以后开发板从EMMC启动,看看能否启动,能启动的话,说明操作成功。如下,开发板能正常启动,完美!
六、一些指令mkfs命令-->make filesystem的缩写;用来在特定的分区建立Linux文件系统,该命令用来在特定的分区创建linux文件系统,常见的文件系统有ext2,ext3,vfat等, 执行mkfs命令其实是在调用:mkfs.ext3 | mkfs.reiserfs|mkfs.ext2| mkdosfs | mkfs.msdos | mkfs.vfat 比如:
mkfs.ext3 /dev/sda6 // 把该设备格式化成ext3文件系统 mke2fs -j /dev/sda6 // 把该设备格式化成ext3文件系统 mkfs.reiserfs /dev/sda6 //格式化成reiserfs文件系统 mkfs.vfat /dev/sda6 //格式化成fat32文件系统 mkfs.msdos /dev/sda6 //格式化成fat16文件系统,msdos就是fat16 mkdosfs /dev/sda6 //格式化成msdos文件系统
mkfs 本身并不执行建立文件系统的工作,而是去调用相关的程序来执行。例如,若在"-t" 参数中指定ext2,则mkfs会调用mke2fs来建立文件系统.使用时如省略指定【块数】参数,mkfs会自动设置适当的块数.在 /dev/hda5 上建一个 msdos 的档案系统,同时检查是否有坏块存在,并且将过程详细列出来 :
mkfs -V -t msdos -c /dev/hda5 mfks -t ext3 /dev/sda6 //将sda6分区格式化为ext3格式 mkfs -t ext2 /dev/sda7 //将sda7分区格式化为ext2格式
mkfs -t 文件系统 存储设备 注: 这里的文件系统是要指定的,比如 ext3 ;reiserfs ;ext2;fat32 ;msdos 等... ...
|