SMP865X-yamon-satadisk readdma解释
来源:互联网 发布:linux 挂起进程 编辑:程序博客网 时间:2024/05/20 03:47
作者mail: agooou@gmail.com
smp8652, smp8653, smp8654, smp8655
SMP865X上yamon中satadisk的语法为:
satadisk [-f] (id [sd0|sd1])|
(readdma sd0|sd1 <sector> <count> <addr> <max sectors in DMA>)|
(writedma sd0|sd1 <sector> <count> <addr> <max sectors in DMA>)
对于readdma,
sd0|sd1表示哪个sata接口,smp8652上只有一个sata接口,所以应该使用sd0。
<sector>表示开始读的存储扇区。每个扇区一般为512字节。
<count>表示要读的扇区个数。
<addr>表示要读到的内存地址
<max sectors in DMA>表示要DMA一次读的大小,这个好像是固定的,128。
例子:
satadisk readdma sd0 63 256 0xb0100000 128;
echo Writing PHY to NAND;
将sata上PHY内容写入到NAND中。为什么sector是从63开始呢?因为我们用fdisk对sata进行分区时,第一个分区是从track1开始的,而不是从track0,每一个track为63个sector。而我们写sata启动盘的时候是从第一个分区的0地址开始写,就相当于我们从整个硬盘的track1开始写,也就是从sector63开始写。所以,我们读的时候就要从整个硬盘的sector63开始读。
分析历程:
平时经常使用fdisk进行分区,分完区后就认为第一个分区是从磁盘的0地址开始的,然后依次类推。
后来,使用linux和windows双系统的时候,遇到了问题。windows系统不知咋的挂了,用系统盘去恢复,恢复完了,windows是能进去,但没有grub启动画面了,进不了linux了。之后明白,是windows安装程序把mbr改了。之后用linux恢复盘进去重新恢复mbr就可以了。
再后来,在做SMP865X-sata启动的时候,准备在yamon下,把sata数据烧进nand,发现烧写nand的代码比较怪异(代码附后)。satadisk readdma是从sata中读取数据,sd0表示sata名字,接着后面63就怪了。为什么是这么一个数字呢?
我把sata查到笔记本上用fdisk看,sudo fdisk /dev/sdb, p一下,发现start是1,猜测一下,如果0是起始值的话,那么1代表的应该是8M,不大可能。
Device Boot Start End Blocks Id System
/dev/sdb1 * 1 17 136521 83 Linux
/dev/sdb2 18 243 1815345 83 Linux
后来想到fdisk的高级功能,x进入,然后按p,打印出详细信息。这次再看发现start是63,对比总数3630690一算,发现是31.5K字节,刚好合适。据此看出第一个分区是从sector63开始。
Disk /dev/sdb: 255 heads, 63 sectors, 243 cylinders
Nr AF Hd Sec Cyl Hd Sec Cyl Start Size ID
1 80 1 1 0 254 63 16 63 273042 83
2 00 0 1 17 254 63 242 273105 3630690 83
3 00 0 0 0 0 0 0 0 0 00
4 00 0 0 0 0 0 0 0 0 00
SMP865X中将sata内容烧写到nand中的程序。
satadisk readdma sd0 63 256 0xb0100000 128; nflash erase -p 0 0x100000 0; echo Formating the NAND ...; nflash format 0; satadisk readdma sd0 23103 256 0xb0100000 128; echo Writing PHY to NAND; nflash write -p 0 0xb0100000 0x20000 0; echo Read YAMON from SATA Disk; satadisk readdma sd0 23359 512 0xb0100000 128; echo Writing YAMON to NAND; nflash write 0x80000 0xb0100000 0x40000 0; echo Read Linux From SATA Disk; satadisk readdma sd0 23871 20480 0xb0100000 128; echo Writing Linux to NAND; nflash write 0xc0000 0xb0100000 0xa00000 0; echo Writing Backup Linux to NAND; nflash write 0xac0000 0xb0100000 0xa00000 0; nflash format 0; echo NAND Initialization finshed!; echo Now reboot the system; reboot
- SMP865X-yamon-satadisk readdma解释
- Yamon的编译
- YAMON阅读笔记(一)
- SMP865X广告机之XENV
- SMP865X广告机之音频
- SMP865X广告机之dcchd
- smp865x广告机之dfb_play_picture
- SMP865X广告机之test_rmfp
- 嵌入式Mips平台YAMON烧写flash
- Yamon startup分析 (未整理一)
- Yamon startup分析(未整理二)
- Yamon startup分析(未整理三)
- Yamon startup分析(未整理四)
- SMP865X广告机之Sata启动
- SMP865X广告机之flash动画
- SMP865X广告机之破解dcchd
- smp865x广告机之nand(1)
- SMP865X广告机之破解XENV
- NIOS+uclinux平台下fpga的在线升级方法
- GetWindowRect获得窗口尺寸的问题
- 如何将事情做好
- Struts2 联合SPRING3方法
- android 代码混淆proguard
- SMP865X-yamon-satadisk readdma解释
- 单链表的逆序输出
- MFC利用回车键代替按键
- mysql相关命令
- 惰性计算(lambda完美实现)
- linux相关命令
- progn的误解
- xargs 中处理多个参数的用法
- word打印的节与页问题