Linux 环境下文件写入.img

 

Linux 环境下文件写入.img

刺猬@http://blog.csdn.net/littlehedgehog

 

 

 

 

下面我们先用bximage创建一个软盘映像。(当然 你也可以用其他的工具创建,比如windows平台上的VPC就有这个功能)

$ bximage
========================================================================
                                bximage
                  Disk Image Creation Tool for Bochs
        $Id: bximage.c,v 1.32 2006/06/16 07:29:33 vruppert Exp $
========================================================================

Do you want to create a floppy disk image or a hard disk image?
Please type hd or fd. [hd] fd

Choose the size of floppy disk image to create, in megabytes.
Please type 0.16, 0.18, 0.32, 0.36, 0.72, 1.2, 1.44, 1.68, 1.72, or 2.88.
[1.44]
I will create a floppy image with
cyl=80
heads=2
sectors per track=18
total sectors=2880
total bytes=1474560

What should I name the image?
[a.img]

Writing: [] Done.

I wrote 1474560 bytes to a.img.

The following line should appear in your bochsrc:
floppya: image="a.img", status=inserted

创建了映像文件后,需要将生成的二进制文件写入软盘的绝对扇区。我们看一下dd这个小工具的用法。
$ dd --help
用法:dd [操作数] ...
或:dd 选项
复制文件,并根据以下的操作数将数据转换并格式化。

bs=字节         强迫 ibs=<字节> 及 obs=<字节>
cbs=字节        每次转换指定的<字节>
conv=关键字     根据以逗号分隔的关键字表示的方式来转换文件
count=块数目    只复制指定量<块数目>的输入数据
ibs=字节        每次读取指定的<字节>
if=文件         读取<文件>内容而非标准输入的数据
iflag=标记    以指定标记取代逗号作为读入符号列表的分隔符
obs=字节        每次写入指定的<字节>
of=文件         将数据写入<文件>而不在标准输出显示
oflag=标记    以指定标记取代逗号作为写出符号列表的分隔符
seek=块数目     先略过以 obs 为单位的指定<块数目>的输出数据
skip=块数目     先略过以 ibs 为单位的指定<块数目>的输入数据
status=noxfer    不显示数据传输状态

<块数目>和<字节>可以加上以下的单位:
xM=M、c=1、w=2、b=512、kB=1000、K=1024、MB=1000*1000、M=1024*1024、
GB=1000*1000*1000、G=1024*1024*1024,还有 T、P、E、Z、Y 如此类推。
每个<关键字>可以是:

ascii     由 EBCDIC 码转换至 ASCII 码
ebcdic    由 ASCII 码转换至 EBCDIC 码
ibm       由 ASCII 码转换至替换的 EBCDIC 码
block     将结束字符块里的换行替换成等长的空格
unblock   会将 cbs 大小的块中尾部的空格替换为一个换行符
lcase     将大写字符转换为小写
nocreat    不创建输出文件
excl        如果输出文件已存在则操作失败
notrunc   不截断输出文件
ucase     将小写字符转换为大写
swab      交换每一对输入数据字节
noerror   读取数据发生错误后仍然继续
sync      将每个输入数据块以 NUL 字符填满至 ibs 的大小;当配合 block
              或 unblock 时,会以空格代替 NUL 字符进行填充
fdatasync   在操作完成前切实写入输出文件
fsync       和上者类似,但同时也写入元数据

每个<标记>符号可以是:

append 追加模式 (只对输出操作有意义)
direct 使用 Direct I/O 存取模式
dsync 对数据采用 I/O 同步
sync 和上者类似,但同时也对元数据生效
nonblock 使用无阻塞 I/O
nofollow 不跟随链接文件
noctty 不根据文件指派控制终端

对运行中的“dd”进程发送一个 USR1 信号会使得
I/O 的统计信息被打印到标准错误设备然后恢复复制操作。

$ dd if=/dev/zero of=/dev/null& pid=$!
$ kill -USR1 $pid; sleep 1; kill $pid
18335302+0 records in
18335302+0 records out
9387674624 bytes (9.4 GB) copied, 34.6279 seconds, 271 MB/s

可用选项有:

      --help     显示此帮助信息并离开
      --version 显示版本信息并离开

请向 <bug-coreutils@gnu.org> 报告错误。

我们用如下命令写入软盘绝对扇区。
$ dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc
记录了 1+0 的读入
记录了 1+0 的写出
512 字节 (512 B) 已复制,0.000112553 秒,4.5 MB/秒

好了,现在终于可以看执行效果了。在终端输入
$ bochs -q -f bochsrc.bxrc
虚拟机运行效果显示如图所示:那个红色的T清晰可见。虽然我们并没有做清屏的工作。
在Linux调试大概就是这样吧。写个Makefile用来处理一系列的任务应该是个不错的选择。

不过在windows里面的时候我记得是写一个批处理文件 ,想进行模拟的时候只要双击那个批处理文件就可以了。在Linux里面可不可以呢,答案是肯定的。我们可以写一个shell脚本本执行。和Windows里的那个批处理文件一样,也是只用两行代码就行:
#!/bin/sh
bochs -q -f bochsrc.bxrc

写完后保存了任意文件名,然后,为这个文件名加可执行权限 。比如我的(文件名为run):
$ sudo chmod +x run
然后想进行模拟时只要在终端里输入
$ sudo ./run
就可以看到bochs运行了。

如果调试带有文件 系统的软盘映像文件 怎么办。别着急,下面几条命令也可以搞定。
首先在/mnt目录下建一个文件 夹,将来我们的映像文件就被 mount到这里。
$ cd /mnt/
$ sudo mkdir floppy
然后回到我们的操作系统开发目录,将软盘映像文件挂载到上面刚刚建 好的目录下面。假设我的软盘映像文件 为:floppya.img
那么我用下面的命令持载:
$ sudo mount ./floppya.img /mnt/floppy/ -o loop
其中-o loop的意思就是将映像文件看作一个块设备(回环设备)。
然后我们就可以很方便的往这个目录里面写文件了。
写完文件后别忘了卸载掉刚刚挂上去的软盘映像。
然后用bochs 进行模拟,效果如下所示:

 

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
网官:http://moodeaudio.org/ IMG文件有点大上传不了,转到百度盘。 4G TF卡,官网在线编译安装完后没做任何设置打包成IMG,方便大家使用,在线编译安装要1小时多,有时还会中断要手动重启树莓派。 用Win32DiskImager 写入TF卡,4G以上。 moode 4.2以raspbian_lite-2018-06-29发行系统为基础在线安装,下面是百度翻译的更新日记。 ################################################## ###### // // 4.2发布2018-07-11 // ################################################## ###### 新功能 - 新增功能:自适应UI版本2 - 新:CoverView全屏用户界面 - 新:蓝牙堆栈与Pi-to-Pi流媒体 - 新:高级搜索“浏览”面板 - 新:图书馆的随机相册选择器 - 新:LMS-Squeezelite / MPD集成 - 新:清除LocalUI浏览器缓存 - 新:用于CPU / RAM使用的Sysmon.php实用程序 - 新增:播放列表的Samba共享点 音频设备 - 新:Allo Katana DAC - 新:Dion Audio LOCO V2 Bug修复 - FIX:与最近的bluez-alsa提交不兼容 - FIX:在bluealsa-dmix,bluealsa-aplay中的Cardnum - FIX:HDMI面板上的音量按钮位置 - FIX:UPnP卷同步无法正常工作 - FIX:r40a更新中缺少玩家avahi文件 - FIX:Pi触摸浏览列表中隐藏的最后项目 - FIX:engineMPD成功分支中的未处理错误 - FIX:配置屏幕上的次要格式问题 - FIX:库加载叠加层的居中问题 - FIX:渲染器关闭不重置活动状态 - FIX:搜索(pl,lib,radio)格式不正确 - FIX:自动滚动失败初始播放btn点击 - FIX:改进MPD更新检测的完整性 - FIX:自定义bgimage各种问题 - 修正:模态关闭后某些ctrls的大纲 更新 - UPD:Bump to Raspbian Stretch Lite 2018-06-27 - UPD:Bump到Linux内核4.14.54 - UPD:跌破MPD 0.20.20 - UPD:使用GPIO重新编译Squeezelite 1.8.7-1052 - UPD:Bump to wiringPi 2.46 - UPD:编译BlueZ 5.49的特定提交 - UPD:编译Bluez-alsa 1.2.0的特定提交 - UPD:在MPD配置中使用每输出混合类型 - UPD:在bluealsa中使用动态A2DP配置文件 - UPD:在/etc/bluetooth/main.conf中使用bredr ControllerMode - UPD:将[GATT]添加到/etc/bluetooth/main.conf - UPD:在bluealsaaplay.conf中使用plughw - UPD:将蓝牙出站案例添加到Audioinfo - UPD:弃用/etc/bluetooth/audio.conf - UPD:从main.conf中删除AutoConnectTimeout - UPD:改进>>播放器中的IP地址获取 - UPD:SEL配置需要feat_bitmask - UPD:将静音指示器更改为“静音” - UPD:向系统信息添加新参数 - UPD:自定义更新后的智能刷新 - UPD:将Google搜索从封面移至标题 - UPD:弃用搜索自动对焦 - UPD:重新设置为font-awesome 5的工具 - UPD:使用缩略图将广播徽标转换为JPG - UPD:将日志文件选项添加到shairport-sync - UPD:Samba共享名称 - UPD:改善点击区域并在面板上突出显示 - UPD:改善悬停帮助 - UPD:安装指南的次要更新 - UPD:为Orange Pi添加HW Rev代码0000 - UPD:删除累积的代码 广播电台 - UPD:CDNX 1和2改为NME 1和2

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值