原文地址:http://samzhen.blogspot.com/2008/11/intel-ce3110canmore.html
Intel Canmore嵌入式平台可以基於多種方式啟動。
先介紹背景知識。
Intel CE3110 啟動時,首先去執行Non flash上的一個稱為CEFDK的程序。CEFDK做最初的初始化動作。然後將執行權交給redboot. redboot則將kernel和rootfs準備好並將執行權交給redboot.
CEFDK, redboot, kernel, rootfs放在不同的位置上,所以Canmore可以有多種啟動方式。
方式1:
CEFDK, redboot,kernel,rootfs全部放入Non flash.
這個方式有個前提, 因為Non flash非常小。 所以 kernel,rootfs必須非常基礎,非常小的。其實做不了什麼事。基本很少使用這種方式。
方式2:
CEFDK,redboot放在Non flash. Kernel放在tftp根目錄。rootfs放在nfs目錄。
這種方式常用來在開發階段使用。因為kernel,rootfs可以很容易的修改。
方式3:
CEFDK,redboot放在Non flash中,Kernel, rootfs放在SATA harddisk中。
這種方式是STB最終產品模式。
現在具體介紹不同方式的做法:
CEFDK在Canmore出廠時,就已經燒入到Non Flash中。所以需要做的就是把redboot, kernel,rootfs放到相應的位置。
方式2:
CEFDK,redboot放在Non flash. Kernel放在tftp根目錄。rootfs放在nfs目錄。
1.首先燒入redboot.
重新啟動Canmore時,按住空格鍵,則進入CEFDK界面:
shell>
shell> ymodem 0x200000 0
在Transfer->send File 中選擇ymodem. 並把redboot_flashboot.bin選中。
傳輸完成後,只是將image放到內存.還需要燒到Non flash中去。
shell>expflash burnFlash 0x200000 0x100000 0x20000
註:redboot_flashboot.bin表示是:這個版本的redboot是放在Non flash中的。
重新啟動Canmore,按ctrl+c.則進入redboot界面:
RedBoot>
2.將kernel放到tftpboot中,將rootfs放到NFS目錄中。
將kernel文件,bzImage放到server的/tftpboot中。(tftp要安裝好)
將rootfs目錄--fsroot放到NFS允許使用的目錄中。(nfs服務要安裝好 /etc/exports要允許Canmore IP地址使用這個目錄)
3.在redboot中,設置kernel,rootfs的放置地點。
RedBoot> fconfig
>> load -v -r -m tftp -h 172.16.1.61 -b 0x200000 bzImage
>> exec -b 0x200000 -l 0x300000 -c "console=ttyS0,115200 root=/dev/nfs rw nfsroot=172.16.1.61:/home/sam/Intel/Canmore/fsroot_canmore_1073_new ip=dhcp mem=exactmap memmap=640k@0 memmap=95M@1M"
>>
Boot script timeout (1000ms resolution): 2Use BOOTP for network configuration: trueDefault server IP address: 172.16.1.70Console baud rate: 115200GDB connection port: 9000Force console for special debug messages: falseNetwork debug at boot time: falseUpdate RedBoot non-volatile configuration - continue (y/n)? y
之後重新啟動,則redboot從172.16.1.61的tftpboot中拿kernel.
把172.16.1.61:/home/sam/Intel/Canmore/fsroot_canmore_1073_new 當作rootfs.
方式3: CEFDK,redboot放在Non flash中,Kernel, rootfs放在SATA harddisk中。
3.1.準備SATA harddisk.
3.1.1分區:
將SATA硬盤連接到開發機Linux上 ,而不是Canmore Linux上。
#fdisk -l
注意:/dev/sdb是4G固態硬盤。/dev/sda是Sam插入的40G SATA硬盤。
Sam想把SATA硬盤分2個區。第一個區用來放置redboot.第二個分區用來放kernel+rootfs.
注意:
#fdisk /dev/sda
Command (m for help): n
Command action e extended p primary partition (1-4)p
Partition number (1-4): 1
First cylinder (1-1022, default 1): Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-1022, default 1022): 1
Command (m for help): n
Command action e extended p primary partition (1-4)p
Partition number (1-4): 2
First cylinder (2-1022, default 2): Using default value 2
Last cylinder or +size or +sizeM or +sizeK (2-1022, default 1022): +1024M
Command (m for help): a
Partition number (1-4): 1
Command (m for help): w
The partition table has been altered!
n:新建partition.
p:邏輯分區
1,2:分區號。
First cylinder :第一個扇區號
Last cylinder or +size or +sizeM or +sizeK :最後一個扇區號.或者用+xxxM.
a: 制定boot flag.
w:執行以上動作。
3.1.2格式化/dev/sda2
#mkfs.ext3 /dev/sda2
3.2:放置redboot.bin到第一個分區。
首先使用tftpboot+nfs方式啟動。
# dd conv=sync if=redboot.bin of=/dev/sda1 [注1]
224+1 records in
225+0 records out
3.3:放置kernel+rootfs到第二個分區。
# mkdir disk
# mount /dev/sda2 /disk/
#cp bzImage /disk
#cd fsroot
# cp * -rf /disk/
3.4:設置redboot:(Sam認為應該是Non Flash中的redboot)
先查看當前Redboot設置。
Redboot> fconfig -l
寫Redboot:
Redboot> fconfig
>> load -v -r -m disk -b 0x200000 hda2:bzImage
>> exec -b 0x200000 -l 0x300000 -c "console=ttyS0,115200 root=/dev/sda2 rw mem=exactmap memmap=640K@0 memmap=95M@1M"
>>
重新啟動。OK
注1:
Linux命令dd:
dd: convert and copy a file.轉換和copy 文件。
conv= : convert the file as per the comma separated symbol list. 將文件轉化為指定的格式
其中:conv = sync:把每個輸入塊填充到ibs個字節,不足部分用空(NUL)字符補齊。
if=:read from FILE instead of stdin。輸入
of=:write to FILE instead of stdout。輸出
# dd conv=sync if=redboot.bin of=/dev/sda1
所以,這句話:將redboot.bin放入/dev/sda1
沒有留言:
張貼留言