在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 并给出实际使用 ...
随机推荐
- JavaScript的技巧和最佳实践
JavaScript是一个绝冠全球的编程语言,可用于Web开发.移动应用开发(PhoneGap.Appcelerator).服务器端开发 (Node.js和Wakanda)等等.JavaScript还 ...
- Fork me on GitHub
<a href="https://github.com/yadongliang"><img style="position: absolute; top ...
- SQLite简单介绍
一.离线缓存 在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等. 说明:离线缓存一般都是把数据保存到项目的沙盒中.有以下几种方式 (1)归档:NSCodeing.NSKeyed ...
- Linux命令-防火墙命令:iptables
iptables详解--转 查看防火墙设置: 第一种方式: cat /etc/sysconfig/iptables 第二种方式: iptables -L -n -v 设置防火墙: 第一种方式: ipt ...
- 局域网不同用户同时登录同一个网站,会出现session乱窜的问题
出现这种问题的情景再现: 1.有一部分人访问网站会出现session乱窜的问题. 2.这部分人是在同一个局域网中. 3.不同菜单看到的信息是不同人的,或者同一个菜单翻页时有的时候看到的是自己的数据,有 ...
- [转]玩转UltraEdit,UE常见快捷键操作
编辑器Ultraedit快捷键说到编辑器的快捷键,VIM是无与伦比的.要反对,也得是带脚踏板的EmaCS.UE还是有差距的,很大差距.注意:VIM是开源.免费的,而UE则需要注册.UE是Windows ...
- django官方文档学习-入门part3创建用户视图
一.官方的约定: 1.在django中有一个约定.那就是每一个app自己的模板最好放在自己app目录下的templates子目录下. 但是这个还没有完成.最好还是在templates目录下加一个app ...
- ios网络层优化深入浅出
网络层是iOS开发必须掌握的部分,苹果已经将网络请求封装得非常易用了,看看NSURLRequest和NSURLConnection的文档,你就知道怎么用了,这里我就不细讲了.本文主要讲网络层的调用逻辑 ...
- ios 开源免费接口
ios 开源免费接口 国家气象局提供的天气预报接口 接口地址: http://www.weather.com.cn/data/sk/101010100.html http://www.weather. ...
- jquery data方法获取某个元素上事件
获取某个元素上的事件,jquery的给元素绑定的事件可以用data方法取出来. 通过$(element).data("events")来获取 // 比如给一个button绑定两个c ...