一.關于開發闆的連接配接以及連接配接等線路的功能
1.在windows下面的連接配接
1)所需的連線
.usb線
其中的一端連接配接USB Slave,另一端接電腦的USB接口。
.竄口的連接配接
在我們的筆記本上面沒有竄口是以就用USB轉竄口
2)超級終端
超級終端提供了一個操作嵌入式系統的接口,是以我們安裝了超級終端後就可以對系統進行一些配置。
.windows下面的超級終端
首先下載下傳一個超級終端軟體(Hypertrm)
其次是配置超級終端:
(1).打開超級終端
(2).為超級終端命名
(3).選擇COM接口
(4).設定超級終端的通訊參數:
.每秒位數在這裡選擇: 115200
.資料流控制選擇: 無
.資料位:8
.奇偶效驗位:無
.停止位:1
2.linux下面的連接配接
.竄口連接配接
.網線的連接配接
交叉網線
2)linux下面超級終端的設定(minicom)
(1) 首先在Linux終端輸入lsusb指令查到裝置資訊:
[root@localhost ~]# lsusb
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 005: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial
(2)檢查是否存在裝置/dev/ttyUSB0,如果沒有就建立一個:
mknod /dev/ttyUSB0 c 188 0
(3)進入終端輸入minicom –s,進入minicom的設定模式。
a)
選擇序列槽:在選擇菜單中的“Serial port setup”,按回車,再按“A”以設定 “Serial Device”/dev/ttyUSB0(注意其中的USB是大寫),按回車傳回。
b)設定波特率:按“E”鍵進入設定“bps/par/Bits”(波特率)界面,如果按“I”以設定波特率為115200,按回車傳回。(我使用的是2440的闆子)
c)資料流控制:按“F”鍵設定“Hardware Flow Control”為“NO”.
d)按Save setup as df1,儲存設定。 按Exit from Minicom退出Minicom.
(4)由于我們使用minicom作為超級終端控制路由器等裝置, 而不是控制modem, 是以需要修改Modem and dialing, 将Init string, Reset string, Hang-up string設定為空. 設定完成後選擇Save setup as dfl将目前設定儲存為預設設定. 在配置菜單 選Save setup as df1儲存(一定要記得這一步). 選Exit退出.下次在輸入minicon 即可直接進入.
3.每根線等作用
(1)windows下面
.竄口線用來傳輸指令(如我們開機進入uboot畫面時選擇的指令和在終端裡面操作的其它指令)
.usb線用來傳輸資料
在此需要一個usb傳輸工具配合使用(dnw)
(2)linux下面
.竄口用來傳輸指令
.交叉網線用來傳輸資料(minicom上的傳輸功能)
二.啟動的方式
1.windows下面
直接通過超級終端啟動無需特别的設定
2.在linux下面的啟動方式
(1)在無需任何設定情況下使用minicom直接啟動
(2)通過nfs挂在進行啟動
當我們通過NFS作為根檔案系統時,開發闆的硬碟就可以變得很大,因為我們使用的是我們等主機硬碟,這也是我們linux作為開發經常使用的方法。
3.通過NFS啟動時等配置
1)配置網絡檔案系統NFS服務
(1)設定共享目錄
運作指令:#gedit /etc/exports
編輯NFS服務的配置檔案(第一次打開時是空的),添加一下内容:
/opt/GTStudio/GT2440/root_qtopia *(rw,sync,no_root_squash)
其中:
/opt/GTStudio/GT2440/root_qtopia表示nfs的共享目錄,他可以作為開發闆等根檔案系統通過nfs挂載
*表示所有客戶機都可以挂載在此目錄
rw表示挂載在此目錄的客戶機對該目錄有讀寫的權利
no_root_squash 表示允許挂載此目錄的客戶機享有該主機的root身份
(2)建立共享目錄
.拷貝CD光牒中的root_qtopia_2.2.0.tar.gz檔案到一mulu
.執行一下解壓指令
#tar xvzf root_qtopia_2.2.0.tar.gz -C / (把檔案解壓到了/opt/GTStudio/GT2440/root_qtopia目錄)
(3)啟動和停止nfs服務
#/etc/init.d/nfs start (啟動)
#/etc/init.d/nfs stop (停止)
(4)通過nfs啟動開發闆時等系統設定
.設定開發闆啟動模式跳線J1為Nand Flash ,連接配接好竄口線,網線;打開minicom,在開機或複位時迅速按下電腦的空格鍵,這樣我們就進入uboot模式。
.選擇菜單功能号【0】,出現設定啟動參數菜單
.然後選擇功能【1】([1]set NFS boot parameter)
其中設定主機IP(192.168.1.22),開發闆等IP(192.168.1.70),設定子網路遮罩255.255.255.0,設定NFS檔案系統所在目錄:/opt/GTStudio/GT2440/root_qtopia
.設定完成選擇功能号【s】儲存參數到nandflash,然後重新開機開發闆即可通過NFS啟動系統了。
(*但是在此要注意nfs服務一定要啟動而且正常運作)
三.系統的安裝以及交叉編譯環境的建立(linux系統環境)
1.系統的安裝
1).格式化nandflash
(1)連接配接好竄口,打開超級終端,上電啟動開發闆,進入BIOS功能菜單:
(2)選擇功能号【9】出現格式化選項
(3)選項說明:
1:徹底格式化Nandflash (包括壞快在内,不是很安全的一種格式化的方法),但在燒寫了winCE
之後,再燒寫linux時要使用此指令。
2).普通格式化。
q.傳回上層菜單。
(4)選擇功能号【1】,出現警告,出入y,完成格式化。
2).安裝uboot
.在BIOS功能菜單裡面選擇功能号【1】,出現USB host connected.Waiting a ownload.此時通過minicom在電腦上下載下傳u-boot_W35.bin的鏡像進行安裝。
3).下載下傳開機畫面
在BIOS主菜單中選擇功能号【b】,下載下傳開機畫面
4).安裝linux核心
在BIOS主菜單中選擇功能号【3】,下載下傳核心zImage
5).安裝檔案系統
在BIOS主菜單中選擇功能号【6】,下載下傳yaffs根檔案系統印象檔案,下載下傳完畢會自動燒寫根檔案系統到Nandflash分區中。
2.交叉編譯環境的建立
1)兩個arm-linux-gcc的作用
arm-linux-gcc-3.4.1用來編譯uboot
arm-linux-gcc-4.3.3用來編譯核心和Qtipia
并且兩個版本都可以用來編譯應用程式
2)安裝
(1)把兩個版本的壓縮包放在一個目錄下(如/tmp)
執行以下指令:
#cd /tmp
#tar xvzf arm-linu-gcc-4.3.3.tgz - C /
#tar xvzf arm-linu-gcc-3.4.1.tgz - C /
執行以上指令把arm-linux-gcc(版本3.4.3和4.3.3)分别安裝到/usr/local/arm/3.4.1和/usr/local/arm/4.3.3
(2)#mkdir -p /opt/GTStudio/GT244(工作目錄,備用)
(3)加入環境變量中
#gedit /root/.bashrc
在最後加上兩行:
#export PATH=$PATH:/usr/local/arm/3.4.1/bin
export PATH=$PATH:/usr/local/arm/4.3.3/bin
(其中#号是用來注釋掉其中一個,因為兩個不能一起使用,是以我們可以用#來回切換兩個版本,但每次修改後必須重新啟動系統,配置才生效)
四.uboot和核心的編譯
1.uboot的編譯
(1)編譯器的選擇arm-linux-gcc-3.4.1
(2)準備合适的uboot源代碼(u-boot-1.1.6.tar.gz),進行解壓
#tar xvzf u-boot-1.1.6.tar.gz -C /(解壓到了/opt/GTStudio/GT2440/u-boot-1.1.6)
(3)配置LCD螢幕類型
修改/opt/GTStudio/GT2440/u-boot-1.1.6/include/configs/GTStudio.g檔案
//#define LCD_TFT PTO35 /*群創3.5寸*/
#define LCD_TFT WD_F3224WI/*勝華3.5寸*/
//define LCE_TFT TX11D/*日立4.3寸*/
(//為被注釋掉,我們選的是WD_F3224WI)
(4)進入uboot主目錄,配置uboot
#make GTStudio_config
#make
(其中GTStudio_config為Makefile裡面的目标,他的作用是選擇開發闆類型,Makefile檔案裡定義了很多開發闆類型)
(5)生成u-boot.bin鏡像
2.核心的編譯
(1)選擇編譯器(arm-linux-gcc-4.3.3)
(2)核心的配置
#make menuconfig
(3)編譯過程
#make clean
#make dep
#make zImage
五.嵌入式Linux啟動過程中的問題積累
Dongas 07-12-19
1.Bad Magic Number
## Booting p_w_picpath at 33000000 ...
Bad Magic Number
OMAP5912 OSK # (tftp下載下傳好kernel的uImage後就停止在這,不能啟動kernel)
問題原因:啟動參數設定錯誤,0x30000000處不可以執行。
有
的開發闆sdram不是在0x33000000,是以不能把kernel
uImage下載下傳到0x33000000中運作。如我之前的bootcmd參數為:setenv bootcmd tftpboot 33000000
uImage\; bootm 33000000。但闆子Omap5912的sdram位址在0x100000000,将參數改為setenv
bootcmd tftpboot 10000000 uImage\; bootm 10000000後便可以啟動kernel了。
2.啟動停止在"Starting kernel ..."
TFTP from server 192.168.167.170; our IP address is 192.168.167.15
Filename 'uImage'
Load address: 0x10000000
Loading: #################################################################
#################################################################
done
Bytes transferred = 2025908 (1ee9b4 hex)
## Booting p_w_picpath at 10000000 ...
Image Name: Linux-2.6.18-mh8_pro500-versatil
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 2025844 Bytes = 1.9 MB
Load Address: 30008000
Entry Point: 30008000
Verifying Checksum ... OK
OK
Starting kernel ... (卡在這裡)
問題原因:多半是kernel沒編譯成功。
确認configure參數是否配置正确,是否選擇了正确的目标編譯平台,如smdk2410等。
3.不能啟動kernel
Starting kernel ...
Uncompressing Linux.........................................................
.................... done, booting the kernel.
問題原因:可能是Bootargs參數設定錯誤,确認bootargs設定是否正确。
4.不能挂載nfs
eth0: link up
IP-Config: Complete:
device=eth0, addr=192.168.167.15, mask=255.255.255.0, gw=192.168.167.254,
host=192.168.167.15, domain=, nis-domain=(none),
bootserver=192.168.167.170, rootserver=192.168.167.170, rootpath=
Looking up port of RPC 100003/2 on 192.168.167.170
Root-NFS: Unable to get nfsd port number from server, using default
Looking up port of RPC 100005/1 on 192.168.167.170
Root-NFS: Unable to get mountd port number from server, using default
mount: server 192.168.167.170 not responding, timed out
Root-NFS: Server returned error -5 while mounting /work/nfs/rootfs_bluetooth_omap
VFS: Unable to mount root fs via NFS, trying floppy.
VFS: Cannot open root device "nfs" or unknown-block(2,0)
Please append a correct "root=" boot option
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
問題原因:這種情況通常是nfs配置問題。
确
認uboot的bootargs參數裡和nfs相關的ip位址資訊設定是否正确,以及Host機/etc/exports配置無誤,重起nfs服務,重新
嘗試連接配接。另外還需要注意bootargs内console和mem兩個參數的設定。kernel2.6後console最好設定為
ttySAC0,mem也要根據開發闆實際情況設定正确。
5.檔案系統不能啟動問題
VFS: Mounted root (nfs filesystem).
Freeing init memory: 128K
/sbin/initKernel panic - not syncing: Attempted to kill init!
問題原因:制作的檔案系統缺少運作busybox所需的libcrypt.so庫,新版本會有缺庫提示,老版本(1.60)沒有。
注:運作一個busybox檔案系統至少需要如下幾個庫:
ld-linux.so.x
libc.so.6
libcrypt.so.x
較新版本的busybox可能還需要
libm.so.6
libgcc_s.so.x
(x為版本号)
6.檔案系統不能啟動問題2
Kernel panic - not syncing: No init found. Try passing init= option to kernel.
問題原因:對比一個可用的檔案系統後發現,缺少了ld-linux.so.x庫,檔案系統裡隻有ld-linux.so.x的連接配接檔案,少拷了庫檔案。
8.不能獲得帳戶UID資訊
Could not get password database information for UID of current process: User "???" unknown or no memory to allocate password entry
Unknown username "root" in message bus configuration file
Failed to start message bus: Could not get UID and GID for username "root"
問題原因:
情況一:系統帳戶驗證出現問題.懷疑是調用getuid、getguid時并沒有傳回正确值,可能是缺少帳戶驗證相關庫,實際排查後發現,缺少libnss_files庫。拷貝交叉編譯器的libnss_files庫到檔案系統後,啟動檔案系統成功。
情況二:系統沒有root帳号。可以由whoami指令看出。
手動建立帳号。
#vi /etc/passwd
root:x:0:0:root:/root:/bin/sh
kyo:x:500:500:kyo:/home/kyo:/bin/bash
添加組
#vi group
root:x:0:root
9.
init started: BusyBox v1.6.1 (2007-08-27 14:33:15 CST) multi-call binary
starting pid 834, tty '': '/etc/init.d/rcS'
Cannot run '/etc/init.d/rcS': No such file or directory
Please press Enter to activate this console.
發現沒有/etc/init.d/rcS檔案系統一樣能正常啟動。看來rcS隻是用來設定一些随機啟動的參數,對檔案能否正常運作關系不大。
注:這個不是錯誤,是偶然發現! :)