天天看點

arm開發版的總結

一.關于開發闆的連接配接以及連接配接等線路的功能

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隻是用來設定一些随機啟動的參數,對檔案能否正常運作關系不大。

注:這個不是錯誤,是偶然發現! :)

繼續閱讀