用uboot 燒寫uboot linux核心 檔案系統到nandflash的 過程以及bootm go命令啟動與區別
結構順序有變化
-1:燒寫uboot
0: bootargs bootcmd 命令引數的設定
1:製作yaffs2的過程
2:燒寫yaffs2的過程
3:製作uimage 的過程
4: 燒寫uiamge的過程
5:uimage zimage vmlinux 的區別
6: uboot傳遞給核心的引數結構 tag
7:bootm go 的 啟動過程 以及區別
8:載入地址 入口地址 等
///////////////////通過uboot燒寫uboot到nandflash/////////////
//////////////
nand
//////////////
tftpboot
/////
Loading: T ##################
done
Bytes transferred = 257164 (3ec8c hex)
[[email protected]]# nand
//////////////
nand
///////////////////通過uboot燒寫核心到nandflash/////////////
先檢視你自己板子的nandflash分割槽表
通過例項分析:下面的燒寫核心出錯
[[email protected]]# tftpboot 30008000 uImage
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
Using dm9000 device
TFTP from server 192.168.0.100; our IP address is 192.168.0.10
Filename 'uImage'.
Load address: 0x30008000
Loading: T #################################################################
done
Bytes transferred = 2287128 (22e618 hex)
[[email protected]]# nand erase 0x60000 0x500000
NAND erase: device 0 offset 0x60000, size 0x500000
Erasing at 0x54000002800000 --
OK
[[email protected]]# nand write 0x30008000 0x60000 22e618
NAND write: device 0 offset 0x60000, size 0x22e618
Attempt to write non page aligned data
下面的燒寫正確:
NAND erase: device 0 offset 0x80000, size 0x500000
Erasing at 0x54000002800000 --
OK
[[email protected]]# nand write 0x30008000 0x80000 22e800
NAND write: device 0 offset 0x80000, size 22e800
改了兩個地方:
1:0x60000 ->0x80000
2:0x22e618 ->22e800
修改的原因是:1:從0x60000檫除 會把bootargs bootcmd 也給檫除了 所以選擇從0x80000開始檫除
2:0x22e618 雖然是通過tftpboot下載的核心的實際大小,但是這裡是write指令 後面的引數是指明要檫寫的長度
/////////////////////設定自啟動引數bootcmd///////////////////
我剛開始時 是這樣寫的:
setenv
按確定後 直接執行了bootm這個命令 於是改了:
setenv
/////////////////////下載yaffs2映像到nandflash中/////////////////////////
生產yaffs2 以及工具請可以參考Tekkaman Ninja 的檔案 uboot 燒寫yaffs2檔案系統
方法是類似於核心的燒寫
先檢視你自己板子的nandflash分割槽表( 比如128M的板子 128M ->8000000 檫寫地址是從0x580000開始 所以 兩個相減 等於 7a80000 而我的是256M的 前面的核心是從0x80000開始的 檫除了0x500000 長度 所以這裡檔案系統 從0x580000 開始 結束到 nandflash的結束
128M
先察除:nand erase 0x580000 7a80000
再寫
mkyaffs2image
生成的檔案系統
在2K資料對齊的問題上 已經採取了對齊措施 使用者不用在考慮資料對齊的問題,而mkimage等工具沒有采用對齊措施 所以是要注意)256M:
先察除:nand erase 0x580000 FA80000
再寫
///////////設定bootargs引數////////////////////////////////////
1:如果用yaffs2檔案系統
setenv bootargs noinitrd root=/dev/mtdblock3 rootfstype=yaffs2 rw console=ttySAC0,115200 init=/linuxrc mem=64M
2:如果用NFS檔案系統
setenv bootargs noinitrd
root=/dev/nfsrwnfsroot=
192.168.0.100 :/ home/lq/rootfs ip=192.168.0.10 console=ttySAC0 mem=64M///////////////bootatgs 引數解析/////////////////////////
root
用來指定rootfs的位置, 常見的情況有:
上 面的這幾個在一定情況下是通用的,當然這要看你當前的系統是否支援,不過mtd是字元裝置,而mtdblock是塊裝置,有時候你的挨個的試到底當前的系 統支援上面那種情況下,不過root=/dev/mtdblockx rw比較通用。此外,如果直接指定裝置名可以的話,那麼使用此裝置的裝置號也是可以的。
在檔案系統為基於nfs的檔案系統的時候使用。當然指定root=/dev/nfs之後,還需要指定nfsroot=serverip:nfs_dir,即指明檔案系統存在那個主機的那個目錄下面。
B. rootfstype
C. console
console=tty
console=ttyS[,options] 使用特定的串列埠,options可以是這樣的形式bbbbpnx,這裡bbbb是指串列埠的波特率,p是奇偶位(從來沒有看過使用過),n是指的bits。
console=ttySAC[,options] 同上面。
看 你當前的環境,有時用ttyS,有時用ttySAC,網上有人說,這是跟核心的版本有關,2.4用ttyS,2.6用ttySAC,但實際情況是官方文件 中也是使用ttyS,所以應該是跟核心版本沒有關聯的。可以檢視Documentation/serial-console.txt找到相關描述。
D. mem
mem=xxM 指定記憶體的大小,不是必須的
E. ramdisk_size
ramdisk=xxxxx
ramdisk_size=xxxxx
上 面這兩個都可以告訴ramdisk 驅動,建立的ramdisk的size,預設情況下是4m(s390預設8M),你可以檢視Documentation/ramdisk.txt找到相關 的描述,不過ramdisk=xxxxx在新版的核心都已經沒有提了,不推薦使用。
F. initrd, noinitrd
當你沒有使用ramdisk啟動系統的時候,你需要使用noinitrd這個引數,但是如果使用了的話,就需要指定initrd=r_addr,size, r_addr表示initrd在記憶體中的位置,size表示initrd的大小。
G. init
init 指定的是核心啟起來後,進入系統中執行的第一個指令碼,一般init=/linuxrc, 或者init=/etc/preinit,preinit的內容一般是建立console,null裝置節點,執行init程式,掛載一些檔案系統等等操 作。請注意,很多初學者以為init=/linuxrc是固定寫法,其實不然,/linuxrc指的是/目錄下面的linuxrc指令碼,一般是一個連線罷 了。
H. mtdparts
mtdparts=fc000000.nor_flash:1920k(linux),128k(fdt),20M(ramdisk),4M(jffs2),38272k(user),256k(env),384k(uboot)
要 想這個引數起作用,核心中的mtd驅動必須要支援,即核心配置時需要選上Device Drivers
mtdparts的格式如下:
mtdparts=[;
因此你在使用的時候需要按照下面的格式來設定:
mtdparts=mtd-id:@(),@()
這裡面有幾個必須要注意的:
a.
b.
舉例:
假設flash 的mtd-id是sa1100,那麼你可以使用下面的方式來設定:
mtdparts=sa1100:-
mtdparts=sa1100:256k(ARMboot)ro,-(root)
可以檢視drivers/mtd/cmdlinepart.c中的註釋找到相關描述。
I. ip
指定系統啟動之後網絡卡的ip地址,如果你使用基於nfs的檔案系統,那麼必須要有這個引數,其他的情況下就看你自己的喜好了。設定ip有兩種方法:
ip = ip addr
ip=ip addr:server ip addr:gateway:netmask::which netcard:off
這兩種方法可以用,不過很明顯第二種要詳細很多,請注意第二種中which netcard 是指開發板上的網絡卡,而不是主機上的網絡卡。
說完常見的幾種bootargs,那麼我們來討論平常我經常使用的幾種組合:
1). 假設檔案系統是ramdisk,且直接就在記憶體中,bootargs的設定應該如下:
setenv bootargs ‘initrd=0x32000000,0xa00000 root=/dev/ram0 console=ttySAC0 mem=64M init=/linuxrc’
2). 假設檔案系統是ramdisk,且在flash中,bootargs的設定應該如下:
setenv bootargs ‘mem=32M console=ttyS0,115200 root=/dev/ram rw init=/linuxrc’
注意這種情況下你應該要在bootm命令中指定ramdisk在flash中的地址,如bootm kernel_addr ramdisk_addr (fdt_addr)
相關推薦
用uboot 燒寫uboot linux核心 檔案系統到nandflash的 過程以及bootm go命令啟動與區別
文章結構 結構順序有變化 -1:燒寫uboot 0: bootargs bootcmd 命令引數的設定 1:製作yaffs2的過程 2:燒寫yaffs2的過程 3:製作uimage 的過程 4: 燒寫uiamge的過程 5:uimage zimage vm
用uboot 燒寫uboot linux核心 檔案系統到nandflash的 過程以及bootm go命令啟動與區別(2010-12-19 17:27:43)
文章結構 結構順序有變化 -1:燒寫uboot 0: bootargs bootcmd 命令引數的設定 1:製作yaffs2的過程 2:燒寫yaffs2的過程 3:製作uimage 的過程 4: 燒寫uiamge的過程 5:uimage zimage vmlinux 的區別 6: uboot傳遞給核心的引數結
Linux核心檔案系統掛載分析
http://edsionte.com/techblog/archives/4389?f=http://blogread.cn/ 1.資料結構 下面將對檔案系統掛載過程中涉及到的兩個主要資料結構vfsmount和path進行節本說明。 1.1 struct vfsmo
linux核心 檔案系統 樹莓派 wireshark ssh uml
1, 原始機器資料格式化輸出 static const char *fmt_lower = "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02
Fedora17下用samba實現windows和Linux跨平臺檔案系統訪問
第一步:在Fedora linux系統下載並安裝samba # yum -y install samba 第二步:編輯samba的配置檔案/etc/samba/smb.conf 1. 找到[homes],複製這6行 yy6p 2.修改
02.linux的檔案系統簡介、檢視目錄ls命令、切換目錄cd命令、建立目錄mkdir、刪除目錄rm、移動重新命名mv、建立檔案touch、拷貝cp
整個檔案系統有一個頂層目錄:/ bin:存放一些可執行的程式(命令); boot:存放系統啟動所需要的一些檔案; dev:系統中的硬體(硬體在Linux中通過裝置檔案來標識); etc:存放配置檔案的地方; home:使用者目錄的總目錄; lib
“轉”使用UBOOT燒寫根檔案系統和核心的方法
①此處param區存放著uboot傳遞給kernel的標記列表,(是uboot傳遞給核心的,核心去讀取),和nandflash上的param儲存區(是uboot自己的)的內容不一樣 nandflash的param儲存區存放的是如 bootargs=console=ttySAC0 noinitrd root=/
用uboot燒寫核心
tftp 0x31000000 192.168.1.78:uImage 1.nand erase 0x80000 0x500000 2.nand write 0x31000000 0x80000 0x500000 3.setenv bootcmd 'nand read 0
tiny4412學習(一)之從零搭建linux系統(燒寫uboot、核心進emmc+uboot啟動核心)
硬體平臺:tiny4412系統:linux-3.5-20151029檔案系統:busybox-1.22.1.tar.bz2編譯器: arm-linux-gcc-4.5.1 目的: 使用uboot引導linux系統,並掛接根檔案系統,搭建起linux開發環境。 由於友
嵌入式linux燒寫核心,檔案系統的2種方式
一.網路下載燒寫 tftpboot 二.linux下的DNW,win7下的DNW無法使用 第一種方式 1.設定開發板ip,及其伺服器IP在同一段 set ipaddr 192.168.1.X set serverip 192.168.1.X 與上面不同 save 2.從
在Tiny6410燒寫linux核心檔案和檔案系統
1配置編譯支援NAND啟動的U-boot 在Linux下安裝MiniTools 要啟動MiniTools,進入MiniTools目錄,在root使用者命令列下執行./start.sh MiniTools開啟,如此時MiniTools最底一行顯示“未連線開發板.
把更改後的uboot燒寫到開發板及遇到的問題
SD卡燒寫過程及遇到的問題 (1)對uboot原始碼進行完修改(修改內容根據自己的理解和分析來修改) (2)make distclean然後make x210_sd_config然後make (3)編譯完成得到u-boot.bin,然後去燒錄。燒錄方法按照裸機第三部分講的linux下使用
Source Insight工程精準匯入用到的Linux核心檔案
下載指令碼檔案:PF_Prj_Gen.sh /*這個指令碼的作用應該是對原始檔進行篩選,挑出編譯出了對應的.o檔案的檔案,然後把這些檔案生成列表,在source insight中新增進去,這種方法瀏覽程式碼很好,過濾掉了沒有用到的一大堆檔案 習慣在ubuntu上面用命令列搜尋,因為比較快,往
使用jlink燒寫uboot
.long 0 @ 0x24: .long 0 @ 0x28: where this vivi was linked, so we can put it in memory in the right place .long _start @ 0x2C
利用SD卡燒寫uboot.bin到nand中
準備: 開發板 tiny6410 梯形口usb線 串列埠線 第一步利用SD-FLASH將superboot燒寫到sd卡上 放到開發板中啟動,串列埠線連線電腦 開啟超級終端(超級終端的設定 為 11520波特率 com3 資料流控制為 無) 然後根據超級終端的顯示來操作
用OpenJTAG燒寫程式到Flash—— 韋東山嵌入式Linux視訊學習筆記03
說明:本文僅在Windows環境下實驗。 韋東山的JZ2440(v2),可以選擇從Nor Flash啟動,也可以選擇從Nand Flash啟動,不管從哪裡啟動,都需要Flash上有程式,沒有程式的話,板子就是一塊磚頭。 按照常規思維,板子上應該有一個Boot
【記錄】Windows下DNW和uboot燒寫
準備 uboot在NORFLASH中,所以先設定設定撥碼開關,選擇NORFLASH啟動 開啟SecureCRT,用於操作uboot,檢視串列埠資訊 開啟DNW工具,傳送檔案 燒寫 重啟板卡
製作和燒寫嵌入式Linux檔案系統過程
1.解壓tar xvf createSdcard.qt4.tar.bz2檔案,在Ubuntu下插入SD卡。 2.執行./createSdCard.sh,即可在SD卡生成 bin 和 system 目錄,bin 裡面的內容不要更改; system 目錄裡的內容將來被 燒寫到
uboot燒寫flash原理
UBOOT燒寫flash命令路徑原理:http://blog.csdn.net/lishaman/article/details/6740866 UBOOT燒寫flash具體晶片操作流程原理:http://blog.csdn.net/qingkongyeyue/articl
基於MT7688模組的開發筆記8——TFTP方式燒寫Uboot韌體
通過TFTP方式,燒寫Uboot.bin韌體需要準備tftpd、SecureCRT,還要準備網線,串列埠線。 一、我的MT7688開發板出廠的IP地址為:192.168.1.1/24,所以給電腦設定一個同網段的靜態IP地址。然後用網線將開發板的LAN與電腦的網絡卡連線。如果