在Linux下制作一个磁盘文件,在u-boot 阶段对emmc 烧写整个Linux系统方法
在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卡进行扩容,
参考: https://github.com/asb/raspi-config/blob/master/raspi-config
先获取你将要扩容的那个分区的开始位置,最后使用fdisk 命令重新分区 注: 你要扩容的分区必须是末分区
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系统方法的更多相关文章
- 如何在linux下制作一个windows的可启动u盘?
如何在linux下制作一个windows的可启动u盘? 情景是这样的,有一个windows10的iso,现在想通过U盘安装,要求即支持UEFI(启动引导器),又支持Legacy(启动引导器),因为有一 ...
- 在GNU/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&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, 第 3 部分: Systemtap
Systemtap的原理,Systemtap与DTrace比较,以及安装要求和安装步骤本系列文章详细地介绍了一个Linux下的全新的调式.诊断和性能测量工具Systemtap和它所依赖的基础kprob ...
- Linux 下的一个全新的性能测量和调式诊断工具 Systemtap, 第 2 部分: DTrace
DTrace的原理本系列文章详细地介绍了一个 Linux 下的全新的调式.诊断和性能测量工具 Systemtap 和它所依赖的基础 kprobe 以及促使开发该工具的先驱 DTrace 并给出实际使用 ...
随机推荐
- ACM遇到的问题与解决方案
C++防止栈溢出措施: 只要在你的代码里加上下面这句话, OK,栈溢出直接搞定!!! #pragma comment(linker, "/STACK:102400000,102400000& ...
- leetcode719:直线上的第k近点对
问题描述 给定数组a[N],可以确定C(N,2)个点对,也就确定了C(N,2)个距离,求这些距离中第k小的距离(k<C(N,2)). 思路 看到第k小.第k大这种问题,首先想到二分法. 把求值问 ...
- Megcup 2017 决赛第一题 规则
2017Megcup 2017Megcup决赛第三题题解 只做出了一道题,虽然慢慢地退出了前128名,但还是要记录一下. 10点钟开始,一看第一题很熟悉,因为研究过格点图中电流问题,其实就是求解线性方 ...
- Android的各版本间的区别总结
Android 1.0 第一版商用操作系统 Android 1.1 更新了部分API,新增一些功能,修正了一些错误,同时增加com.google.android.maps包 Android 1.5智能 ...
- python学习笔记——
python线程的GIL GIL (全局解释器锁)python --- > 支持多线程 ----> 同步和互斥 --->加锁 --->解释器加锁 ————> 解释器同一时 ...
- python学习笔记012——pdb调试
1 描述 pdb 是 python 自带的一个包,为 python 程序提供了一种交互的源代码调试功能, 主要特性包括设置断点.单步调试.进入函数调试.查看当前代码.查看栈片段.动态改变变量的值等 调 ...
- Error parsing XML: not well-formed (invalid token) 报错
鼠标右键选择Source然后再选Format 就可以解决此问题
- 让easyui的datagrid的field支持属性的子属性(field.childfield)
如果不修改后台返回的数据格式,就只能修改easyui的源代码了. 首先在easyui的源代码中找到下面的部分,VS可以用 “var.*_.+=.*_.+\[.*_.+\];” 这个正则表达式来查找,会 ...
- 【转】js frame 框架编程
源地址:http://www.blogjava.net/lusm/archive/2008/02/11/179620.html 1 框架编程概述 一个Html 页面可以有一个或多个子框架,这些子框架以 ...
- hdu4901The Romantic Hero
#include<iostream> #include<map> #include<string> #include<cstring> #include ...