http://m.blog.csdn.net/article/details?id=51400196(轉)
VMware12
環境:ubuntu12.4
開發板:tiny4412
首先燒寫bootloader,我用一個8G的內存卡,現在不說sd卡的制作過程了,網上可以參考。
現在就把我給arm的emmc燒寫過程開始說。
用sd卡啟動,開發板的右下角有個開關控制啟動方式,往下是sd卡啟動,往上是mmc啟動。
1,、先用sd卡啟動
注意:把右下角的開關撥到下面。啟動后的是[940122@xxxxxxx] #
fdisk -p命令 查看內存分區 ,fdisk -p 1 查看mmc的分區 fdisk -p 0查看sd卡的信息如下:
[940122@xxxxxx] #fdisk -p 1 //mmc的信息
partion # size(MB) block start # block count partition_Id
1 695 6070812 1424478 0x0C
2 320 134244 656304 0x83
3 2057 790548 4213770 0x83
4 520 5004318 1066494 0x83
[940122@tengfei] #fdisk -p 0 //這是sd卡的信息
partion # size(MB) block start # block count partition_Id
1 14756 8192 30220288 0x0C
2、進去之后給mmc分區
fdisk -p 1(設備號) 對1查看
fdisk -c 1 320 2057 520 分區為4個,數字對應大小
結果像上面fdisk -p 1 那樣
3、格式化分區
格式化四個分區時注意,第一分區是fatformat格式的
fatformat mmc 1:1
2、3、4分區都是ext3format的
ext3format mmc 1:2
ext3format mmc 1:3
ext3format mmc 1:4
格式化完成
4、燒寫bootloader
首先打開mmc使用如下命令[940122@tengfei] #fdisk -p 0 emmc open 1
eMMC OPEN Success.!!
!!!Notice!!!
!You must close eMMC boot Partition after all image writing!
!eMMC boot partition has continuity at image writing time.!
!So, Do not close boot partition, Before, all images is written.!
打開成功
事先編譯好Exxx_bl1.bin 、bl2.bin 、 Exxx_tzsw.bin 、../../u-boot.bin(上上層目錄)
將這四個文件分別寫入四個分區
開發板下 pc下
dnw 50000000 dnw Exxxx_bl1.bin
mmc write 1 50000000 0x0 0x10
dnw 50000000 dnw bl2.bin
mmc write 1 50000000 0x10 0x20
dnw 50000000 dnw ../../u_boot.bin
mmc write 1 50000000 0x30 0x290
dnw 50000000 dnw Exxxx_tzsw.bin
mmc write 1 50000000 0x2c0 0xb8
關閉mmc
[940122@tengfei] #emmc close 1
添加共享目錄vim /etc/exports
加上 /rootfs (rootfs是要共享的目錄)*(rw,sync,no_root_squash)保存退出
設置引導,打開共享目錄中的/rootfs/etc/inittab
vim /rootfs/etc/inittab 然后 添加上::sysinit:/etc/init.d/rcS
ttySAC0::askfirst:-/bin/sh兩行保存退出(你可以先將根文件的壓縮包先解壓到/rootfs(就是你的共享目錄))
*******************注意是共享目錄下的etc不是pc根目錄下的******************
奶奶的我就出錯到這了,自動掛載pc的rootfs死活掛不到,這樣出現的效果是眼睜睜的看着開發板內核已經啟動好了,minicom終端就是進不去,無法獲得終端控制權,急死人。
5、加載內核
先將右下角的開關推上去mmc啟動
[tiny4412@name #
先將根文件系統解壓到PC機作為開發板掛載目錄nfsroot,然后將內核(zImage需要提前編譯好)和根文件系統的包放進去,用內核引導開發板掛載pc的共享目錄
設置bootargs
set bootargs "root=/dev/nfs nfsroot=192.168.0.6:/rootfs ip=192.168.0.199 console=ttySAC0,115200lcd=S70 init=linuxrc"
我pc的ip是192.168.0.6 開發板是0.199
設置bootcmd
set bootcmd "dnw 40008000;bootm 40008000"
設置cmd后就不用手動去40008000這個地址執行了
重啟開發板就出現等待dnw接收zImage的提示了 在pc端找到zImage,#dnw zImage
開發板下就啟動內核了,可能碰到的錯誤nosoundcard 這是網絡出現了問題 沒有掛載上pc的共享目錄。這時就得檢查你的共享目錄、pc中、etc/export中的設置、板子的ip,網線是否鏈接。出現Please press Enter to activate this console. 就說明掛載上了。
在pc端將你的zImage和根文件系統放到共享目錄中,我的是rootfs。
掛載mmc的分區執行mount /etc/mmcblk0p2 /mnt/
cp zImage /mnt/ 將zImage拷貝到第二分區中,待會啟動的時候就會自己去這個分區找內核並啟動內核
*****************umount /mnt/一定記得卸載******************
6、制作根文件系統
掛載mmc第三分區寫根目錄
mount /dev/mmcblk0p3 /mnt/
tar rootfs—2014tar.gz -C /mnt/將根文件系統的壓縮包指定路徑(-C大寫)解壓到/mnt 這是板子的
進去/mnt中rootfs—2014(解壓后的跟文件目錄)文件目錄中,把里面全部的東西拷貝到放在/mnt中,可以用mv * /mnt/刪除空的解壓目錄 rootfs—2014
然后拷貝inittab 到/mnt/etc cp /etc/inittab /mnt/etc
記得 umount /mnt
重啟設置引導到此為止燒寫成功了bootloader和內核鏡像
設置開發板的參數
重啟開發板,按回車鍵輸入pri查看bootargs和bootcmd主機從機ip等信息
[tiny4412@name] #pri
baudrate=115200
bootargs=root=/dev/mmcblk0p3 console=ttySAC0,115200 init=linuxrc lcd=S70
bootcmd=ext2load mmc 0:2 40008000 zImage;bootm 40008000
bootdelay=1
ethaddr=00:40:5c:26:0a:5b
filesize=4B3068
gatewayip=192.168.0.1
ipaddr=192.168.0.199
netmask=255.255.255.0
serverip=192.168.0.6
Environment size: 306/16380 bytes
主要是設置bootargs和bootcmd
set bootcmd "ext2load mmc 0:2 40008000 zImage;bootm 40008000"
#sav(保存你的設置 )
set bootargs"root=/dev/mmcblk0p3 console=ttySAC0,115200 init=linuxrc lcd=S70"
#sav
如果bootargs設置成這樣想要讓pc編譯好的二進制文件在arm運行,還的重新掛載pc的共享目錄,
你可以設置成set bootargs "root=/dev/nfs nfsroot=192.168.0.6:/rootfs ip=192.168.0.199 console=ttySAC0,115200lcd=S70 init=linuxrc"
就可以自動掛載pc共享目錄了。注意不能寫錯,細心一點。
錯的多了就知道在那改了,錯着錯着就對了,就會了。
好沒好重啟開發板試試唄。
Please press Enter to activate this console.出現就說明對了。值得幸災樂禍一下了。