zoukankan      html  css  js  c++  java
  • 一个版本烧录过程中记录:fdisk、mkfs.ext4、make_ext4fs、img2simg、simg2img

     关键词:dd、fdisk、mkfs.ext4、make_ext4fs、img2simg、simg2img等等。

    一个典型的嵌入式系统是由uboot+kernel+rootfs组成的,其中uboot和kernel都是二进制,rootfs存在文件系统。

    二进制在烧录的时候比较简单,将二进制数据写入存储设备固定地址;rootfs存在文件系统,所以需要对存储设备进行分区,然后在分区上建立文件系统。

    对存储介质分区可以直接挂载,进行分区、挂载,然后将rootfs内容写入,即完成了rootfs更新。

    或者创建一个普通image文件,然后将文件当成一个分区,在其上创建rootfs。创建的普通image文件,可以使raw image也可以是sparse image。

    1. 二进制文件烧录

    二进制文件更新比较简单,直接使用DD即可。

    dd if=spl.bin of=/dev/sdc bs=1024 seek=33

    2. fdisk创建分区

    通过fdisk可以在一个物理设备上创建分区表,也可以在一个image文件上创建分区。

    fdisk -l device将输出指定设备的分区信息,不指定device则显示系统所有设备的分区信息。

    AME
           fdisk - manipulate disk partition table
    
    SYNOPSIS
           fdisk [options] device
    
           fdisk -l [device...]

    fdisk device之后,输入m显示帮助信息。n新增一个分区表,p显示分区信息,w保存分区信息,q退出。

    可以将分区命令输入到一个fdisk_input文件中,然后fdisk <fdisk_input读取分区命令并执行生成分区表。

    cat > fdisk_input <<EOF
    n
    p
    1
    61440
    
    
    p
    w
    EOF
    
    fdisk -u ${ALL_IN_ONE} <fdisk_input

    退出后即可看到创建的分区。

    3. 创建ext4的raw image文件系统

    首先创建一个空白image文件,如果在设备上创建则直接使用。

    然后调用mkfs.ext4在文件或者设备上创建ext4文件系统,将创建好的文件系统mount到一个目录。

    将rootfs文件写入mount目录,并sync。

    最后将文件系统进行umount。

    dd if=/dev/zero of=${ROOTFS_EXT4} bs=1M count=${ROOTFS_SIZE}
    mkfs.ext4 ${ROOTFS_EXT4} -F
    
    mkdir -p /tmp/emmc
    sudo mount -t ext4 ${ROOTFS_EXT4} /tmp/emmc -o data=journal,barrier=1
    sudo rm -rf /tmp/emmc/*
    cd /tmp/emmc
    sudo cpio -idm < ${ROOTFS_CPIO}
    sync
    cd -
    sudo umount /tmp/emmc

    即完成了文件系统创建。

    4.创建ext4的sparse image文件系统

    工具make_ext4fs可以创建稀疏ext4文件系统,制作出来的文件尺寸较小。

    make_ext4fs -l 2018M -s rootfs.sparse ../target/

    即可创建完成2018M大小的rootfs.spare image文件,文件来源于../target/目录。

    5. sparse image和raw image互转

    通过simg2img可以将sparse image转换成raw image,img2simg可以将raw image转换成sparse image。

    Usage: simg2img <sparse_image_files> <raw_image_file>
    Usage: img2simg <raw_image_file> <sparse_image_file> [<block_size>]

    分别执行:

    simg2img rootfs.sparse rootfs.sparse2raw
    img2simg rootfs.ext4 rootfs.ext42sparse

     结果如下:

    rootfs.ext4:       Linux rev 1.0 ext4 filesystem data, UUID=a8e84664-5362-4ab2-8bd3-bb20ea25e1ee (extents) (large files) (huge files)
    rootfs.ext4s:      Android sparse image, version: 1.0, Total of 516608 4096-byte output blocks in 404 input chunks.
    rootfs.sparse:     Android sparse image, version: 1.0, Total of 516608 4096-byte output blocks in 1187 input chunks.
    rootfs.sparse2raw: Linux rev 1.0 ext4 filesystem data, UUID=57f8f4bc-abf4-655f-bf67-946fc0f9f25b (extents) (large files)

    参考文档:

    1.《http://2net.co.uk/tutorial/android-sparse-image-format

  • 相关阅读:
    Android学习笔记触摸事件
    Android学习笔记长按事件的处理
    Android学习笔记物理按键事件处理
    JAVA爬虫入门学习
    SpringBoot的服务入门(Get、Post)
    spring boot 入门学习
    Java 爬虫简单起步
    哇 好久不写C 忘得差不多
    Winfrom窗体应用程序___CefSharp的基础应用
    Winfrom窗体应用程序___DataGridView
  • 原文地址:https://www.cnblogs.com/arnoldlu/p/11468877.html
Copyright © 2011-2022 走看看