在Linux 下制作一个磁盘文件, 可以给他分区,以及存储文件,然后dd 到SD卡便可启动系统。

在u-boot 下启动后可以读取该文件,直接在u-boot 阶段就可以做烧写操作,省略了进入系统后才进行烧写的动作。



* 参考 http://www.orangepi.org/Docs/Makingabootable.html , 具体步骤如下:

  • 一、 dd 一段空白空间到一个普通文件上

    sudo dd if=/dev/zero of=my.img  bs=1M count=200
# dd 一个200 兆的空间到
  • 二、 加载这个镜像通过 losetup 命令

    sudo losetup -f --show my.img
    # 它显示你挂载到那个设备节点下,一般为 /dev/loop0 ,1 ,2, 3...7
/dev/loop0
  • 三、 通过 fdisk 命令对磁盘文件进行分区,就跟普通磁盘文件一样。

    sudo fdisk  /dev/loop0
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x2e7df78e.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) Command (m for help): n # 新建一个分区
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p # 主分区
Partition number (1-4, default 1): 1 # 分区号
First sector (2048-409599, default 2048): # 默认2048
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-409599, default 409599): +30M
# 给30M空间第一个分区
Command (m for help): n # 新建一个分区
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p # 主分区
Partition number (1-4, default 2): # 使用默认的2
Using default value 2
First sector (63488-409599, default 63488): # 使用默认值
Using default value 63488
Last sector, +sectors or +size{K,M,G} (63488-409599, default 409599): # 直接到结束
Using default value 409599 Command (m for help): t # 改变分区
Partition number (1-4): 1 # 改变第几个分区
Hex code (type L to list codes): e # 改为FAT16分区
Changed system type of partition 1 to e (W95 FAT16 (LBA)) Command (m for help): a # 增加boot 属性
Partition number (1-4): 1 # 指定第一个分区增加boot 属性 ommand (m for help): w # 保存相关信息
The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 22: Invalid argument.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8) WARNING: If you have created or modified any DOS 6.x
partitions, please see the fdisk manual page for additional
information.
Syncing disks.
  • 三、 同步这个img 并对他进行格式化

    sudo kpartx -av /dev/loop0
[sudo] password for aplex:
add map loop0p1 (252:0): 0 61440 linear /dev/loop0 2048
add map loop0p2 (252:1): 0 346112 linear /dev/loop0 63488
    # 格式化
sudo mkfs.vfat -n "boot" -F 16 /dev/mapper/loop0p1
sudo mkfs.ext3 -L "rootfs" /dev/mapper/loop0p2
  • 四、 拷贝文件到两个分区

    sudo mount /dev/mapper/loop0p1 /mnt
sudo cp myfile /mnt
sudo umount /mnt
# 第二个分区操作方法如上
  • 五、 将.img 解除映射

    sudo  kpartx -d /dev/loop0
sudo losetup -d /dev/loop0
    PART_START=$(fdisk -l /dev/mmcblk0 | grep "Linux" | awk '{print $2}')

    fdisk /dev/mmcblk0 << EOF
d # 删除一个分区
2 # 指定删除第二个分区
n
p
2
$PART_START # 指定开始的地址
# 默认将整个 emmc 都扩到etx4 文件系统
w
EOF
  • 七、 重启,执行 resize2fs /dev/mmcblk0p2

    root@sbc-7109:~# resize2fs /dev/mmcblk0p2
root@sbc-7109:~# df -h
Filesystem Size Used Available Use% Mounted on
/dev/root 3.6G 174.1M 3.2G 5% /
devtmpfs 234.4M 160.0K 234.2M 0% /dev
tmpfs 40.0K 0 40.0K 0% /mnt/.psplash
/dev/mmcblk0p1 10.0M 4.6M 5.4M 46% /media/mmcblk0p1
tmpfs 16.0M 148.0K 15.9M 1% /var/volatile
tmpfs 242.6M 0 242.6M 0% /dev/shm
tmpfs 16.0M 0 16.0M 0% /media/ram
  • 扩容成功

在Linux下制作一个磁盘文件,在u-boot 阶段对emmc 烧写整个Linux系统方法的更多相关文章

  1. 如何在linux下制作一个windows的可启动u盘?

    如何在linux下制作一个windows的可启动u盘? 情景是这样的,有一个windows10的iso,现在想通过U盘安装,要求即支持UEFI(启动引导器),又支持Legacy(启动引导器),因为有一 ...

  2. 在GNU/Linux下制作Windows 10安装U盘

    今年春节回家期间,我需要将家里的一台安装了Debian Stretch的ZaReason笔记本电脑更换为Windows 10系统,好让爸妈从老台式机上的XP系统升级到新的平台上来.回家前,小仙女已在微 ...

  3. linux下制作linux系统盘(光盘、U盘)

    cdrecord制作启动光盘 首先cdrecord -scanbus输出设备列表和标识,(我的此次为5,0,0)  [ˈrekərd] 然后用cdrecord -v dev=5,0,0 -eject ...

  4. 在Linux下制作Linux&windows启动盘

    在Linux下制作Linux&windows启动盘 如何在Linux-mint环境下,制作其他Linux发行版的UEFI启动盘,以及Windows10的UEFI模式启动盘. 对于U盘的操作,可 ...

  5. Linux下配置一个VNC服务器

    在Linux下配置一个VNC服务器,并设置2个用户,要求其中一个用户登录时不需要输入密码. 然后在客户端使用ssh+vncview的方式访问. 1确认vnc安装 2配置vncserver 3测试vnc ...

  6. 如何在Linux下拷贝一个目录呢

    cp -af newadmin/movie/.   uploadfile/mallvideo/ 如何在Linux下拷贝一个目录呢?这好像是再简单不过的问题了. 比如要把/home/usera拷贝到/m ...

  7. 【转载】在Linux下,一个文件也有三种时间,分别是:访问时间、修改时间、状态改动时间

    在windows下,一个文件有:创建时间.修改时间.访问时间.而在Linux下,一个文件也有三种时间,分别是:访问时间.修改时间.状态改动时间. 两者有此不同,在Linux下没有创建时间的概念,也就是 ...

  8. Linux 下的一个全新的性能测量和调式诊断工具 Systemtap, 第 3 部分: Systemtap

    Systemtap的原理,Systemtap与DTrace比较,以及安装要求和安装步骤本系列文章详细地介绍了一个Linux下的全新的调式.诊断和性能测量工具Systemtap和它所依赖的基础kprob ...

  9. Linux 下的一个全新的性能测量和调式诊断工具 Systemtap, 第 2 部分: DTrace

    DTrace的原理本系列文章详细地介绍了一个 Linux 下的全新的调式.诊断和性能测量工具 Systemtap 和它所依赖的基础 kprobe 以及促使开发该工具的先驱 DTrace 并给出实际使用 ...

随机推荐

  1. Nginx中Laravel的配置

    server { listen 80; server_name sub.domain.com; set $root_path '/var/www/html/application_name/publi ...

  2. 【LeetCode】79. Word Search

    Word Search Given a 2D board and a word, find if the word exists in the grid. The word can be constr ...

  3. POJ 3007 Organize Your Train part II (字典树 静态)

    Organize Your Train part II Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6478   Acce ...

  4. android 登陆界面

    LoginActivity.java package com.example.ruian; import android.app.Activity; import android.app.AlertD ...

  5. Linux时间子系统(十二) periodic tick

    一.tick device概念介绍 1.数据结构 在内核中,使用struct tick_device来抽象系统中的tick设备,如下: struct tick_device {     struct ...

  6. jdbc与odbc的差别,感悟,学习。。。

    什么是JDBC? JDBC, 全称为Java DataBase Connectivity standard, 它是一个面向对象的应用程序接口(API), 通过它可訪问各类关系数据库.JDBC也是jav ...

  7. .NET设计模式(4):建造者模式(Builder Pattern)(转载)

    概述 在 软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成:由于需求的变化,这个复杂对象的各个部分经常面临着剧 烈的变化,但是将它们组合在一起的算法确相对稳 ...

  8. unity, shader input and output

    http://wiki.unity3d.com/index.php?title=Shader_Code

  9. unity3d prefab

    用prefab创建的实例,其position/rotation/scale并不会随prefab的position/rotation/scale修改而更新,其它属性才会. 不过如果prefab的某个实例 ...

  10. 如何在 Visual Studio 2013 中调试.NET Framework 4.5.1 代码

    版本需求如标题,在 工具->选项->调试->常规 中,更改以下设置: 禁用:启用“仅我的代码”.逐过程执行属性和运算符(仅限托管).要求源文件与原始版本完全匹配 启用:启用 .NET ...