用TF卡/SD卡制作成启动盘

现在这电子产品是越来越不值钱了,一个1G的TF卡也就二三十块钱,相信很多人手里都有闲置没用TF卡或者SD卡,这里就我自己的经验来说说怎么把它弄成启动盘
这里主要用到两个软件:USBOOT1.7和Grub4Dos-0.4.4以及UltraISO,在网上都很容易找到
首先把TF卡/SD卡用读卡器插到电脑USB接口上,然后用USBOOT将它做成一个Dos启动盘(在做成DOS盘之前最好先把U盘中的重要数据备份一下,然后选择“FAT(默认)”将它格式化)。
用USBOOT做DOS启动盘的步骤如下:
1、打开USBOOT(Vista和WIn7下请以管理员权限运行),会弹出一个警告告诉你危险性,由于之前已经备份了U盘中的数据,所以不用管这些警告直接确定;
2、在出现的窗口中选择你的TF卡或者SD 卡(这里注意,千万不要误选了你的硬盘,可以根据列表中显示的盘符以及对应的盘的大小来判断),然后点击USBoot程序窗口底部的“点击此处选择工作模式”,在弹出的菜单中选择“HDD模式”、“ZIP模式”或者“FDD模式”这三个中的一种,这三种模式的具体含义我就不介绍了(因为我自己也弄不太懂)。如果你不清楚自己的电脑究竟支持哪一种模式的引导的话,可以分三次实验一下(多动手做才能出好结果嘛)。本人建议选择“ZIP”模式,这个模式的兼容性好一点,大部分电脑都支持这种模式的启动,而网上的很多方法中说的“HDD”模式在本人的电脑上就用不起来。
3、点击USBOOT的“开始”按钮开始写入引导信息,这期间程序会提示你拔下你的U盘或者TF卡,照做就行,然后在它提示你再次插上U盘或者TF卡的时候你在插上,它会继续完成引导写入,直到最后听见“梆!”的一声结束。到此,一个Dos启动盘就做好了,打开TF卡或者SD卡你会看到三个文件:IO.SYS、MSDOS.SYS还有COMMAND.COM(这个文件是隐藏的),只要重启电脑然后设置BIOS,将从USB启动设置成优先启动就可以从TF卡或者SD卡中引导启动了(怎么设置请自行在百度上搜索,这里不是本文的重点)。如果这次没能启动,或许是你之前选的引导模式不对,换成其他引导模式再试试,如果“HDD模式”、“ZIP模式”或者“FDD模式”三个都不行的话,后面的步骤就不用看了。
4、从这一步开始接下来的几个步骤都是在能够从TF卡或者SD卡启动的基础上进行的。下载Grub4Dos-0.4.4,解压后在其中的chinese文件夹中找到grub.exe复制到TF卡或者SD卡的根目录下(至于问什么选择chinese文件夹下的grub.exe,因为咱是中国人呗,这个程序放在chinese文件夹下因该是支持中文的吧)。在TF卡或者SD卡的根目录下新建一个txt文件,然后把以下内容复制到该文件中:

default 0   #grub菜单默认选择项是第0项
timeout 20 #菜单启动后如果二十秒内用户没有选择,则执行默认菜单项

find --set-root /myudisk.txt  #设置根目录,在后面解释
fontfile /BootRc/fonts #加载中文字体文件,字体文件fonts放在TF卡根目录下的/BootRc文件夹下

background 191919 #背景色
foreground 2cffcf  #前景色,也就是菜单文字的显示颜色

title 0  从硬盘启动系统  #菜单标题
root (hd0,0)        #选择该菜单项后将要执行的命令
chainloader +1

title 1 重启
reboot

title 2 关机
halt

将以上这些内容复制到该文本文件后将文件名改成menu.lst,这就是grub引导的菜单项列表。另外在TF卡或者SD卡的根目录下新建一个名为myudisk.txt 的空文本文件,这个文件叫什么名字无所谓,它只是用来标示根目录用的,只要保证在TF卡中没有与其同名的文件,并且与菜单项的find --set-root语句设定的文件名对应就可以了。另外还需下载一个中文字体文件,然后放到上面列表中所示的文件夹中。
这些都弄好之后,重启电脑,引导进入DOS,输入grub命名就可以启动grub你的菜单了。现在可以选择从硬盘启动、重启或者关机(关机命令可能在有些电脑上不好用,查了一下,好像与电脑的电源管理模块有关,还没找到很好的解决办法,其实这个时候你按电源键直接强行关机就可以,因为这时候还没有开始读硬盘,强行关机不会对硬盘以及硬盘上的操作系统产生损害)。

5、在grub中加入WinPE启动项。这里不采用网上大部分的引导WinPE方法(网上的方法大部分是将WinPE的部分文件放到TF卡的根目录中来引导,不知道为什么我试过很多次都没有成功),而是直接引导WinPE的ISO镜像文件的方法。下载一个老毛桃WinPE的U盘版。我们只是想引导单纯的WinPE系统,所以要把其他的没用的文件删掉。用UltraISO打开WinPE光盘镜像,将里面的AUTORUN.inf和SetUp文件夹中的文件删掉。将镜像中MINIPE文件夹提取出来放到TF卡的根目录,镜像文件中的MINIPE文件夹就可以删掉了。最后保存修改好的镜像文件(此时镜像文件会变得很小)。
6、在TF卡根目录下新建imgs文件夹,把之前修改好的WinPE的ISO镜像文件放到imgs文件夹下,在menu.lst中添加菜单项:

title 1  进入WinPE系统
find --set-root /myudisk.txt
map /imgs/WINPE.iso (hd32)
map --hook
chainloader (hd32)

重启之后选择该菜单项就可以进入WinPE系统了

7还可以在网上下载一些工具的img和ima镜像文件,放到imgs文件夹下,然后添加相应的引导菜单项就可以了:

title 2  运行Ghost11.0备份还原
find --set-root /myudisk.txt
map --mem /imgs/GHOST.IMG (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

title 4  进入Win98启动盘
find --set-root /myudisk.txt
map /imgs/win98.IMA (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

至此一个TF卡成了一个启动盘了,不过这里启动Grub菜单还是用的手动输入的方式,其实另外还有一种方法,就是将grub写入TF卡的MBR中,这样启动时就直接进入grub菜单。不过这种方法我一直没弄成功。
另外还有方法说,在根目录中新建一个AUTOEXEC.BAT文件,文件的内容只有:
grub
这样进入dos之后直接执行AUTOEXEC.BAT中的命令。这种方法我也试过,结果启动时自动执行的命令成了乱码,也不知道是怎么回事。所以无奈只有用手动启动grub的形式了。

如果你的TF卡是1G以上的容量,你可以在里面放一个XP的Ghost镜像,这样进入Ghost11.0或者WinPE后都可以直接给人装系统啦。

<think>好的,我现在需要帮用户给一段C代码添加注释。首先,我得仔细看看用户提供的代码片段,理解每一行在做什么,然后根据DMA配置的相关知识来添加合适的注释。 首先,用户给出的代码是三个函数调用,都涉及DMA_CH5_BASE这个DMA通道的配置。这三个函数分别是DMA_configAddresses、DMA_configBurst和DMA_configTransfer。我的任务是为每一行代码添加注释,解释它们的作用和参数的含义。 首先看第一个函数:DMA_configAddresses(DMA_CH5_BASE, rxMsgData, (uint16_t *)(CANA_BASE + CAN_O_IF2DATA)); 这个函数应该是在配置DMA通道的源地址和目的地址。DMA_CH5_BASE是通道5的基地址,第二个参数rxMsgData可能是目的地址,第三个参数是源地址,这里用了CANA_BASE加上CAN_O_IF2DATA的偏移,应该是CAN接口的数据寄存器地址。所以需要注释说明源和目的地址的具体含义,比如将数据从CAN接口的IF2数据寄存器传输到rxMsgData缓冲区。 接下来第二个函数:DMA_configBurst(DMA_CH5_BASE, DMA_BURST, 2, 1); 这个函数配置DMA的突发传输。参数可能依次是基地址、突发传输模式、突发大小和步进值。需要解释每个参数的意义,比如突发大小为2表示每次突发传输2个数据单元,源地址步进为1可能表示传输后地址递增。 第三个函数:DMA_configTransfer(DMA_CH5_BASE, DMA_TRANSFER, 0, 0); 这个函数配置传输特性,可能包括传输数据的大小、传输模式等。参数可能涉及数据单元大小(如16位或32位)、传输次数等。后两个参数0可能表示目的和源地址的步进值,但需要确认具体函数定义,这里可能需要假设或者根据常见用法说明。 在添加注释时,需要注意以下几点: 1. 每个函数的作用要明确,参数的意义要解释清楚。 2. 使用中文,语言简洁明了。 3. 可能需要参考具体的DMA库文档,确保参数含义正确,比如DMA_BURST和DMA_TRANSFER的具体枚举值对应的配置。 可能的疑问点: - DMA_configBurst的第三个参数是突发大小,第四个是步进值,是否正确? - DMA_configTransfer的后两个参数是否为步进值,是否有方向区分? 假设用户使用的库函数参数顺序和常规一致,比如DMA_configBurst的参数顺序是基地址、突发模式、突发大小、步进值。同样,DMA_configTransfer的参数可能包括数据单元大小、传输次数、目的步进、源步进,但这里后两个参数都是0,可能表示地址不递增或者固定。 需要确保注释准确,但如果有不确定的地方,可能需要用户参考具体文档,但在没有更多信息的情况下,可以基于常见情况进行解释。</think>以下是对代码段的逐行中文注释及功能解释: ```c /* 配置DMA通道5的源地址和目的地址 */ DMA_configAddresses( DMA_CH5_BASE, // 选择DMA通道5 rxMsgData, // 目的地址:接收消息的缓冲区 (uint16_t *)(CANA_BASE + CAN_O_IF2DATA) // 源地址:CAN-A接口的IF2数据寄存器 ); /* 配置DMA通道5的突发传输特性 */ DMA_configBurst( DMA_CH5_BASE, // 选择DMA通道5 DMA_BURST, // 使用突发传输模式 2, // 每次突发传输2个数据单元(假设为16位数据) 1 // 源地址传输后自动递增(步长=1个数据单元) ); /* 配置DMA通道5的传输参数 */ DMA_configTransfer( DMA_CH5_BASE, // 选择DMA通道5 DMA_TRANSFER, // 传输模式(需结合具体库定义,通常为单次/循环传输) 0, // 目的地址传输后不递增(固定地址) 0 // 源地址传输后不递增(已在Burst配置中设置递增) ); ``` ### 关键参数说明: 1. **地址配置** - 实现从CAN接口的`IF2DATA`寄存器到`rxMsgData`缓冲区的数据传输 - `CANA_BASE + CAN_O_IF2DATA`指向CAN模块的接口数据寄存器物理地址 2. **突发传输** - 突发大小设为2:每次触发DMA传输2个连续数据单元(如2个uint16) - 源地址递增:每次传输后源地址+2字节(假设数据单元为16位) 3. **传输特性** - 目的地址固定:适用于外设寄存器等固定地址场景 - 与`DMA_configBurst`配合实现:突发传输时源地址递增,目的地址保持不变 > **注意**:具体参数行为需结合芯片手册,不同厂商DMA库的实现可能略有差异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hanjiangying

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值