看了一段時間的u-boot了,到今天才真正完全實現u-boot引導內核和文件系統,順利開機,在此記錄完整過程
1、首先如果你u-boot還沒有一直也沒有關系,這里上傳了一個已經移植好的u-boot,版本問2010.03,多謝tekkaman分享的這個源碼
分享下載地址:u-boot-2010.03
編譯uboot的過程就不在多說了,解壓到你希望的目錄下執行make,當時事前安裝好交叉編譯工具,這個相信大家都會
編譯完成之后生成uboot.bin文件,使用mini2440自帶的USB下載方式下載到開發板,選擇v命令下載即可
開機界面如下,你的可能不完全顯示的一樣,這是經過我修改的
U-Boot 2010.03 (Jun 20 2013 - 08:43:59)
Modified by Seal (king_haitao@163.com)
Study Linux and love linux forever!!
Study u-boot
I2C: ready
DRAM: 64 MB
Flash: 2 MB
NAND: 256 MiB
Video: 240x320x16 20kHz 62Hz
In: serial
Out: serial
Err: serial
USB slave is enable!
Net: dm9000
Hit any key to stop autoboot: 0
[u-boot@MINI2440]#
然后就要開始考慮怎么下載內核了,不錯,要引導內核首先你需要把內核下載的你的內存中,那么首先配置好你的下載環境是最重要的
2、linux nfs安裝與配置
在ubuntu下安裝、配置nfs服務的步驟如下:
安裝nfs
Ubuntu上默認是沒有安裝nfs服務器的,因此我們首先安裝nfs服務器端:
$sudo apt-get install nfs-kernel-server
在一些文檔中,提出還需要使用apt-get來手動安裝nfs的客戶端nfs-common,以及端口映射器portmap,但其實這是沒有必要的,因為在安裝nfs-kernel-server時,apt會自動為我們把它們安裝好。
配置/etc/exports
nfs允許掛載的目錄及權限在文件/etc/exports中進行了定義。
例如,我們要將根目錄下的rootfs目錄共享出來,那么我們需要在/etc/exports文件末尾添加如下一行:
/rootfs *(rw,sync,no_root_squash)
其中: /rootfs是要共享的目錄,*代表允許所有的網絡段訪問,rw是可讀寫權限,sync是資料同步寫入內存和硬盤,no_root_squash是nfs客戶端分享目錄使用者的權限,如果客戶端使用的是root用戶,那么對于該共享目錄而言,該客戶端就具有root權限。
nfs的安裝如果大家還有疑問網上可以多查查
接下就要配置pc端和我們開發板端的ip等,以達到我們使用nfs這種方式下載image的目的
從新啟動nfs
/etc/init.d/nfs-kernel-server restart
掛載方法:
mount 192.168.1.103:/root/tftpboot /test
嵌入式要mount 的時候 使用
mount -o nolock 192.168.1.103:/root/tftpboot /mnt/net
3、配置開發板ip和主機ip
我的配置參數:
開發板ip:192.168.1.102
主機ip(pc端ip):192.168.1.103
uboot啟動起來的使用printenv查看默認參數,包括開發板ip、server ip,還有其他一些啟動參數
[u-boot@MINI2440]# printenv
bootdelay=5
baudrate=115200
ethaddr=08:08:11:18:12:27
netmask=255.255.255.0
tekkaman=bmp d 70000
stdin=serial
stdout=serial
stderr=serial
ethact=dm9000
ipaddr=192.168.1.102
serverip=192.168.1.103
gatewayip=192.168.1.1
bootcmd=nfs 0x30008000 192.168.1.103:/root/tftpboot/w35_image.img ;bootm 30008000
bootargs=root=/dev/nfs rw nfsroot=192.168.1.103:/root/tftpboot/rootfs ip=192.168.1.102:192.168.1.1::255.255.255.0 console=ttySAC0,115200 init=/linuxrc mem=64M
Environment size: 460/131068 bytes
[u-boot@MINI2440]#
上面打印出來的參數請參照設置,特別是以下說到的幾個參數格外小心,他們直接關系到你的image是否可以成功下載,成功被引導,文件系統是否成功掛載并啟動
其實為了使用nfs而設定的參數為以下以下幾個:
ipaddr(開發板ip)
serverip(pc端作為服務器的ip)
gatewayip(使主機ip和開發板ip在同一個網段內)
bootcmd用于啟動時下載image到指定的內存地址,同時使用bootm命令引導內核啟動
bootargs 用于使用nfs方式掛載我們創建好的文件系統
其他參數從字面大家也可以理解,設置方法很簡單,舉例說明,設置bootcmd的方法
setenv bootcmd 'nfs 0x30008000 192.168.1.103:/root/tftpboot/w35_image.img ;bootm 30008000'
其他設置方法依次類推,值得注意的是:設置完成必須保持到內存,下一次啟動才會生效,使用saveenv命令
4、如何實現使用nfs下載image到指定內存
首先需要制作能被u-boot直接引導的內核image,通常,kernel的啟動需要u-boot提供一些參數信息,比如ramdisk在RAM中的地址。經過編譯后的u-boot在根目錄下的tools目錄中,會有個叫做mkimage的工具,他可以給zImage添加一個header,也就是說使得通常我們編譯的內核zImage添加一個數據頭信息部分,我們把添加頭后的image通常叫uImage,uImage是可以被u-boot直接引導的內核鏡像。
mkimage工具的使用介紹如下:
使用: 中括號括起來的是可選的
mkimage [-x] -A arch -O os -T type -C comp -a addr -e ep -n name -d data_file[:data_file...] image
選項:
-A:set architecture to 'arch' //用于指定CPU類型,比如ARM
-O:set operating system to 'os' //用于指定操作系統,比如Linux
-T:set image type to 'type' //用于指定image類型,比如Kernel
-C:set compression type 'comp' //指定壓縮類型
-a:set load address to 'addr' (hex) //指定image的載入地址
-e:set entry point to 'ep' (hex) //內核的入口地址,一般為image的載入地址+0x40(信息頭的大小)
-n:set image name to 'name' //image在頭結構中的命名
-d:use image data from 'datafile' //無頭信息的image文件名
-x:set XIP (execute in place) //設置執行位置
先將u-boot下的tools中的mkimage復制到主機的/usr/local/bin目錄下,這樣就可以在主機的任何目錄下使用該工具了。
首先請確認你的uboot配置信息是否與我上面說到的一致,很重中,決定成敗
現在我們進入kernel生成目錄(一般是arch/arm/boot目錄),然后執行如下命令,就會在該目錄下生成一個uImage.img的鏡像文件,把他復制到你的nfs配置好的目錄下,我的是/root/tftpboot,這就是我們所說的uImage。當然你現在不想編譯內核也沒有關系,使用mini2440自帶的image,我的是zImage_W35,打開終端,現操作如下:
root@ubuntu:~/tftpboot# ls
file rootfs u-boot.bin uImage zImage_W35
root@ubuntu:~/tftpboot# mkimage -n 'mini2440_linux' -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008040 -d zImage_W35 w35_image.img
Image Name: mini2440_linux
Created: Fri Jun 21 08:37:58 2013
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 2266616 Bytes = 2213.49 kB = 2.16 MB
Load Address: 30008000
Entry Point: 30008040
root@ubuntu:~/tftpboot# ls
file rootfs u-boot.bin uImage w35_image.img zImage_W35
root@ubuntu:~/tftpboot# chmod 777 w35_image.img
root@ubuntu:~/tftpboot# ls
file rootfs u-boot.bin uImage w35_image.img zImage_W35
root@ubuntu:~/tftpboot#
一定要記住修改文件的可執行權限,否則下載時可能提示你找不到文件,我最終生成的image名字就是w35_image.img
接下來你可以重啟開發板看結果了
U-Boot 2010.03 (Jun 20 2013 - 08:43:59)
Modified by Wang,Hai-Tao (king_haitao@163.com)
Study Linux and love linux forever!!
Study u-boot
I2C: ready
DRAM: 64 MB
Flash: 2 MB
NAND: 256 MiB
Video: 240x320x16 20kHz 62Hz
In: serial
Out: serial
Err: serial
USB slave is enable!
Net: dm9000
Hit any key to stop autoboot: 0
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
File transfer via NFS from server 192.168.1.103; our IP address is 192.168.1.102
Filename '/root/tftpboot/w35_image.img'.
Load address: 0x30008000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#####################################################
done
Bytes transferred = 2266680 (229638 hex)
## Booting kernel from Legacy Image at 30008000 ...
Image Name: mini2440
Created: 2013-06-20 16:34:41 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 2266616 Bytes = 2.2 MB
Load Address: 30008000
Entry Point: 30008040
Verifying Checksum ... OK
XIP Kernel Image ... OK
OK
Starting kernel ...
Uncompressing Linux................................................................................................................................................... done, booting the kernel.
Linux version 2.6.32.2-FriendlyARM (root@localhost.localdomain) (gcc version 4.4.3 (ctng-1.6.1) ) #18 Wed Apr 13 20:06:31 HKT 2011
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
CPU: VIVT data cache, VIVT instruction cache
Machine: FriendlyARM Mini2440 development board
Memory policy: ECC disabled, Data cache writeback
CPU S3C2440A (id 0x32440001)
S3C24XX Clocks, (c) 2004 Simtec Electronics
S3C244X: core 405.000 MHz, memory 101.250 MHz, peripheral 50.625 MHz
CLOCK: Slow mode (1.500 MHz), fast, MPLL on, UPLL on
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 16256
Kernel command line: root=/dev/nfs rw nfsroot=192.168.1.103:/root/tftpboot/rootfs ip=192.168.1.102:192.168.1.1::255.255.255.0 console=ttySAC0,115200 init=/linuxrc mem=64M
PID hash table entries: 256 (order: -2, 1024 bytes)
Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
Memory: 64MB = 64MB total
Memory: 60084KB available (4176K code, 451K data, 156K init, 0K highmem)
SLUB: Genslabs=11, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
Hierarchical RCU implementation.
NR_IRQS:85
irq: clearing pending status 02000000
irq: clearing subpending status 00000002
Console: colour dummy device 80x30
console [ttySAC0] enabled
Calibrating delay loop... 201.93 BogoMIPS (lpj=504832)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
NET: Registered protocol family 16
S3C2440: Initialising architecture
S3C2440: IRQ Support
S3C24XX DMA Driver, (c) 2003-2004,2006 Simtec Electronics
DMA channel 0 at c4808000, irq 33
DMA channel 1 at c4808040, irq 34
DMA channel 2 at c4808080, irq 35
DMA channel 3 at c48080c0, irq 36
S3C244X: Clock Support, DVS off
bio: create slab SCSI subsystem initialized usbcore: registered new interface driver usbfs usbcore: registered new interface driver hub usbcore: registered new device driver usb s3c-i2c s3c2440-i2c: slave address 0x10 s3c-i2c s3c2440-i2c: bus frequency set to 98 KHz s3c-i2c s3c2440-i2c: i2c-0: S3C I2C adapter NET: Registered protocol family 2 IP route cache hash table entries: 1024 (order: 0, 4096 bytes) TCP established hash table entries: 2048 (order: 2, 16384 bytes) TCP bind hash table entries: 2048 (order: 1, 8192 bytes) TCP: Hash tables configured (established 2048 bind 2048) TCP reno registered NET: Registered protocol family 1 RPC: Registered udp transport module. RPC: Registered tcp transport module. RPC: Registered tcp NFSv4.1 backchannel transport module. NetWinder Floating Point Emulator V0.97 (double precision) yaffs Apr 13 2011 18:29:56 Installing. msgmni has been set to 117 alg: No test for stdrng (krng) io scheduler noop registered (default) Console: switching to colour frame buffer device 40x15 fb0: s3c2410fb frame buffer device backlight initialized leds initialized buttons initialized pwm initialized adc initialized s3c2440-uart.0: s3c2410_serial0 at MMIO 0x50000000 (irq = 70) is a S3C2440 s3c2440-uart.1: s3c2410_serial1 at MMIO 0x50004000 (irq = 73) is a S3C2440 s3c2440-uart.2: s3c2410_serial2 at MMIO 0x50008000 (irq = 76) is a S3C2440 loop: module loaded S3C24XX NAND Driver, (c) 2004 Simtec Electronics s3c24xx-nand s3c2440-nand: Tacls=3, 29ns Twrph0=7 69ns, Twrph1=3 29ns
上一篇:uboot移植到mini2440
下一篇:記錄一下自己在mini2440上面 使用uboot的曲折的經歷
推薦閱讀
史海拾趣
隨著電子行業的快速發展,市場競爭日益激烈。為了應對挑戰,FCT Electronics不斷加大研發投入,推出了一系列具有自主知識產權的新產品。同時,公司還加強了與高校、研究機構的合作,引進了一批高素質的人才,為公司的持續發展注入了新的活力。
DAVE Embedded Systems深知品質對于企業發展的重要性。他們建立了嚴格的質量管理體系,確保從原材料采購到產品制造的每一個環節都符合高標準的質量要求。同時,公司還提供了優質的售后服務,為客戶提供了全方位的技術支持和解決方案。這些舉措不僅贏得了客戶的信任和支持,還為公司樹立了良好的口碑。
隨著全球市場的不斷擴大,ALD積極推進國際化戰略。公司通過與全球各地的OEM制造商建立合作關系,將產品銷往世界各地。同時,ALD還積極參與國際電子展會和論壇,展示其最新技術和產品,與全球同行交流合作。這些舉措不僅提升了ALD的國際知名度,還為公司帶來了更多的商機和發展空間。
隨著環保意識的提高,Devar Inc公司也積極投身環保科技領域。公司研發了一系列環保型電子產品和解決方案,如可降解材料制成的電子產品外殼、節能型電源管理系統等。同時,Devar還積極參與電子廢棄物的回收和處理工作,推動循環經濟的發展。這些努力不僅有助于減少環境污染和資源浪費,也提升了公司的社會責任感和品牌形象。
面對日益激烈的市場競爭和不斷變化的市場需求,愛晟電子始終堅持以創新驅動發展。公司不斷投入研發資金,加強研發團隊的建設,推動技術的不斷進步和創新。同時,公司還積極探索新的應用場景和市場領域,為未來的發展奠定了堅實的基礎。這些努力使得愛晟電子在電子行業中保持了持續的發展勢頭和競爭力。
1. 解決文字顯示不完整問題 Protel99使用了Windows默認的System字體,但使用中,在對話框中有時會出現文字顯示不完整的問題,解決這個問題的方法是修改Protel99系統默認的System字體。具體方法如下: (1)點擊設計瀏覽主菜單“↓”按鈕,彈出 ...… 查看全部問答∨ |
|
無論何時,數據都可謂企業運轉的血液。而在這個網絡時代,數據保護更是成為大大小小企業們的不可避免的重要話題。但中小企業所面臨的問題與大型企業相比,其復雜性也不可小視。可以說,其數據管理的復雜性與大型企業不相上下,而其支持力量卻很有限 ...… 查看全部問答∨ |
|
EVC中是不是不支持settimer的SLIDER_TIMER參數?? EVC中是不是不支持settimer的SLIDER_TIMER參數?? mSliderTimer = SetTimer(SLIDER_TIMER, 100, NULL); 報錯是:error C2065: \'SLIDER_TIMER\' : undeclared identifier… 查看全部問答∨ |
|
晚上回家測試波形是否正確, 軟仿好向沒問題了!整個算法一次耗時,4.125us,在10KHz的PWM時占用CPU資源4.125%,硬件是可能更長一點兒,晚上在報告.執行的算法: 模擬的角度發生器, 電壓變化自補嘗 &nbs ...… 查看全部問答∨ |
|
設計了一種基于Ms P 4 3 0處理器的溫控系統, 介紹了系統主要硬件, 重點介紹了溫度控制系統及其算法的實現, 這里采用的是史密斯一 模糊自調整 P I D控制系統, 該系統通過對傳統的史密斯預估器進行改良, 將該模糊自調整P I D控制器引入史密斯控 ...… 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- 高通攜手中國“汽車朋友圈”亮相2025上海車展: 加速駕駛輔助普惠,推動艙駕創新升級
- 工業市場正在快速回暖,德州儀器如何重塑電力電子市場?
- 特斯拉:美國交付的Model Y/3電池包已實現100%美國生產
- 地平線與博世深化合作,攜手為多家車企提供輔助駕駛產品
- 強化中國市場戰略布局,德州儀器正靈活應對全球關稅挑戰
- Molex莫仕通過本地合作和創新加強支持中國汽車行業
- 貿澤開售Texas Instruments適用于高分辨率AR HUD的 全新DLP4620S-Q1 0.46"汽車數字微鏡器件
- ROHM推出高功率密度的新型SiC模塊,將實現車載充電器小型化!
- 用上車規級UFS 4.0,讓出行變得高效且可靠
- 車載測試技術解析:聚焦高帶寬、多通道同步采集與協議分析