在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

六、 在u-boot 下读取该文件,并直接将整个文件写到emmc, 启动emmc 系统后 参考 raspi-config 对已经做好的SD卡进行扩容,

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下制作一个windows的可启动u盘?

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

在GNU&sol;Linux下制作Windows 10安装U盘

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

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

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

在Linux下制作Linux&amp&semi;windows启动盘

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

Linux下配置一个VNC服务器

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

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

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

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

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

Linux 下的一个全新的性能测量和调式诊断工具 Systemtap&comma; 第 3 部分&colon; Systemtap

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

Linux 下的一个全新的性能测量和调式诊断工具 Systemtap&comma; 第 2 部分&colon; DTrace

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

随机推荐

C&num;之 Lambda表达式

Lambda表达式 简化了匿名委托的使用,让你让代码更加简洁,优雅.据说它是微软自c#1.0后新增的最重要的功能之一. 首先来看一下其发展 根据上面的发展历程,可以感到Lambda表达式愈加简化. 详 …

hibernate&lpar;二&rpar;一级缓存和三种状态解析

序言 前一篇文章知道了什么是hibernate,并且创建了第一个hibernate工程,今天就来先谈谈hibernate的一级缓存和它的三种状态,先要对着两个有一个深刻的了解,才能对后面我要讲解的一对 …

【js】将table的每个td的内容自动赋值给其title属性