九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
AT91RM9200引導(dǎo)程序的建立(一)--

本系列文章將詳細(xì)的講述AT91RM9200引導(dǎo)程序的建立過程,其中包括建立交叉編譯工具鏈,gdb+gdbserver的編譯安裝使用,tftp,NFS的安裝使用,超級(jí)終端或者minicom的使用,內(nèi)核的編譯升級(jí),U-Boot的移植,Ramdisk、根文件系統(tǒng)的建立制作,busybox的編譯、應(yīng)用等。從而重現(xiàn)完整的開發(fā)過程。在寫這個(gè)文檔的過程中,本人參考了許多資料,在這里要感謝互聯(lián)網(wǎng),感謝所有社區(qū),論壇里無私提供幫助的同行們。特別感謝一下魯郁先生,是他讓我在AT91RM9200上成功的移植了U-Boot1.1.4。本人是從不懂一路走來,走的過程中將開發(fā)過程詳細(xì)記述下來,從一個(gè)初學(xué)者的角度來寫下這個(gè)系列的文章,以方便其他初學(xué)者能得到一些幫助,少走一些彎路。本系列文章主要講述開發(fā)過程及實(shí)際應(yīng)用,并不能很好的講述一些原理性的東西,所以您在看這篇文章的時(shí)候最好要參考其他資料,以形成一個(gè)完整的知識(shí)鏈。祝你旅途愉快。

開發(fā)環(huán)境

軟件環(huán)境

              宿主機(jī):Redhat9.0 ,虛擬機(jī)vmware5.5.1

U-Boot 1.1.4,    busybox1.2.2.1

硬件環(huán)境

              CPU:AT91RM9200 ,180MHz(200MIPS)

              存儲(chǔ)器:32M   SDRAM(MT48LC8M16A2)

                            64Mbits   Flash(SST39VF6401B)

              USB接口:USB-Host     USB-Device

           網(wǎng)絡(luò)接口: 10/100M    DM9161E

              DBGU串行調(diào)試接口

            JTAG接口

 

移植過程

虛擬機(jī)

關(guān)于虛擬機(jī)的安裝使用,這里就不介紹了。使用很方便,網(wǎng)上也有大量的資料。大家可自行查閱。我們使用的是5.5.1版本,當(dāng)然,你也可以使用最新的版本。

建立交叉編譯工具鏈。

交叉編譯工具鏈就是為了在一個(gè)平臺(tái)體系結(jié)構(gòu)下(X86 PC機(jī))能編譯,鏈接,處理和調(diào)試另一個(gè)平臺(tái)體系結(jié)構(gòu)下(ARM)的程序,使得編譯生成的程序能夠在另一平臺(tái)下運(yùn)行。

Linux使用的工具鏈軟件是:Binutils,gcc,glibc,gdb。

其中binutils是二進(jìn)制程序處理工具。gcc是編譯器。glibc是應(yīng)用程序編程的函數(shù)庫文件軟件包。gdb是調(diào)試工具。

對(duì)交叉編譯工具鏈的編譯是很麻煩和瑣碎的一件事,如果自己一個(gè)一個(gè)編譯,很可能會(huì)遇到各種各樣的麻煩。幸好有人做了一套腳本程序,可以很方便的生成你所需要的交叉編譯工具鏈。我們使用的腳本就是crosstool,關(guān)于詳細(xì)內(nèi)容可以訪問http://kegel.com/crosstool/,可以從該網(wǎng)站下載到它的腳本,補(bǔ)丁和文檔。

本文以i686平臺(tái),虛擬機(jī)vmware5.5.1redhat9.0來建立arm交叉編譯工具鏈。

我們采用crosstool0.42來作為我們編譯交叉編譯工具鏈的腳本。詳細(xì)的用法說明請(qǐng)閱讀網(wǎng)站上的文檔crosstool-how to

[zzl@localhost] tar -xzvf crosstool-0.42.tar.gz

[zzl@localhost]cd crosstool-0.42

我們可以看到目錄下有很多.sh腳本和.dat配置文件。每一個(gè)支持的CPU都有它所相應(yīng)的腳本,如我們選用demo-arm-softfloat.sh 就是建立目標(biāo)為支持軟浮點(diǎn)的arm的交叉編譯工具鏈。其中需要我們記住的三個(gè)重要的變量:
            
TARBALLS_DIR=$HOME/downloads  

RESULT_TOP=/opt/crosstool

GCC_LANGUAGES="c,c++"

第一行指明我們放置源代碼軟件包的目錄,我的主目錄是/home/zzl。第二行指明我們生成的交叉編譯工具鏈在/opt/crosstool下。第三行表示,我們的交叉編譯工具鏈支持c,c++語言。

我們需要如下壓縮包:
gcc-3.4.1.tar.gz                glibc-2.3.3.tar.gz         linux-2.6.17
binutils-2.15.tar.gz            glibc-linuxthreads-2.3.3.tar.gz

所以,你的首要任務(wù)是下載這些源代碼軟件包,并將它們放在/home/zzl/downloads下面,保證這些包的所有者為當(dāng)前用戶而不是根用戶。

由于我們以后的內(nèi)核版本為2.6.17,所以我們還需要下載linux2.6.17的內(nèi)核包,并放在/home/zzl/downloads/下。

我們選擇的配置是:demo-arm-softfloat.sh,其內(nèi)容具體如下:

                #!/bin/sh

set -ex

TARBALLS_DIR=$HOME/downloads

RESULT_TOP=/opt/crosstool

export TARBALLS_DIR RESULT_TOP

GCC_LANGUAGES="c,c++"

export GCC_LANGUAGES

 

# Really, you should do the mkdir before running this,

# and chown /opt/crosstool to yourself so you don‘t need to run as root.

mkdir -p $RESULT_TOP

 

# Build the toolchain.  Takes a couple hours and a couple gigabytes.

 

#eval `cat arm-softfloat.dat gcc-3.3.3-glibc-2.3.2.dat` sh all.sh --notest

#eval `cat arm-softfloat.dat gcc-3.4.0-glibc-2.3.2.dat` sh all.sh --notest

 eval `cat arm-softfloat.dat gcc-3.4.1-glibc-2.3.3.dat` sh all.sh --notest

#eval `cat arm-softfloat.dat gcc-3.4.1-glibc-20040827.dat`  sh all.sh --notest

 

echo Done.

從這一行eval `cat arm-softfloat.dat gcc-3.4.1-glibc-2.3.3.dat` sh all.sh --notest

可以看出,我們的gcc版本采用3.4.1,glibc版本采用2.3.3。
      
我們?cè)賮砜?/span>gcc-3.4.1-glibc-2.3.3.dat這個(gè)文件

BINUTILS_DIR=binutils-2.15

GCC_DIR=gcc-3.4.1

GLIBC_DIR=glibc-2.3.3

LINUX_DIR=linux-2.6.8

GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.3

由于我們采用的是Linux-2.6.17的內(nèi)核包,所以這里要將linux-2.6.8改成linux-2.6.17。否則,腳本執(zhí)行解壓縮時(shí),找不到linux源代碼包。

建立我們的目標(biāo)生成目錄

[zzl@localhost]sudo mkdir /opt/crosstool

[zzl@localhost]sudo chown zzl /opt/crosstool

 

執(zhí)行我們的配置文件arm-softfloat.sh

[zzl@localhost]sh demo-arm-softfloat.sh

    這里要注意運(yùn)行該配置文件不能以root來運(yùn)行,crosstool-0.42, /opt/crosstool為非root用戶所有。

如果一切順利的話,經(jīng)過一段時(shí)間的等待,得到一個(gè)新目錄:(如果不順利且始終找不到錯(cuò)誤原因的話,我建議你重新安裝redhat9.0的操作系統(tǒng),然后按照先前步驟進(jìn)行。:))

/opt/crosstool/gcc-3.4.1-glibc-2.3.3/arm-softfloat-linux-gnu

交叉編譯工具就在該目錄的bin/

[zzl@localhost]ls –l /opt/crosstool/gcc-3.4.1-glibc-2.3.3/arm-softfloat-linux-gnu/bin

總用量 29184

-rwxr-xr-x    1 zzl      zzl       1806212 12 29 09:02 arm-softfloat-linux-gnu-addr2line

-rwxr-xr-x    2 zzl      zzl       1864030 12 29 09:02 arm-softfloat-linux-gnu-ar

-rwxr-xr-x    2 zzl      zzl       3248953 12 29 09:02 arm-softfloat-linux-gnu-as

-rwxr-xr-x    2 zzl      zzl        287996 12 29 09:43 arm-softfloat-linux-gnu-c++

-rwxr-xr-x    1 zzl      zzl       1761855 12 29 09:02 arm-softfloat-linux-gnu-c++filt

-rwxr-xr-x    1 zzl      zzl        287111 12 29 09:43 arm-softfloat-linux-gnu-cpp

-rwxr-xr-x    2 zzl      zzl        287996 12 29 09:43 arm-softfloat-linux-gnu-g++

-rwxr-xr-x    2 zzl      zzl        285852 12 29 09:43 arm-softfloat-linux-gnu-gcc

-rwxr-xr-x    2 zzl      zzl        285852 12 29 09:43 arm-softfloat-linux-gnu-gcc-3.4.1

-rwxr-xr-x    1 zzl      zzl         16241 12 29 09:43 arm-softfloat-linux-gnu-gccbug

-rwxr-xr-x    1 zzl      zzl        103366 12 29 09:43 arm-softfloat-linux-gnu-gcov

-rwxr-xr-x    1 zzl      zzl       2286490 12 29 09:02 arm-softfloat-linux-gnu-gprof

-rwxr-xr-x    2 zzl      zzl       2542659 12 29 09:02 arm-softfloat-linux-gnu-ld

-rwxr-xr-x    2 zzl      zzl       1840205 12 29 09:02 arm-softfloat-linux-gnu-nm

-rwxr-xr-x    1 zzl      zzl       2344807 12 29 09:02 arm-softfloat-linux-gnu-objcopy

-rwxr-xr-x    1 zzl      zzl       2487727 12 29 09:01 arm-softfloat-linux-gnu-objdump

-rwxr-xr-x    2 zzl      zzl       1864029 12 29 09:02 arm-softfloat-linux-gnu-ranlib

-rwxr-xr-x    1 zzl      zzl        384396 12 29 09:02 arm-softfloat-linux-gnu-readelf

-rwxr-xr-x    1 zzl      zzl       1712993 12 29 09:01 arm-softfloat-linux-gnu-size

-rwxr-xr-x    1 zzl      zzl       1689683 12 29 09:02 arm-softfloat-linux-gnu-strings

-rwxr-xr-x    2 zzl      zzl       2344806 12 29 09:02 arm-softfloat-linux-gnu-strip

-rwxrwxr-x    1 zzl      zzl         19084 12 29 09:43 fix-embedded-paths

我們可以看出,交叉編譯的所有工具都在這里。

將這個(gè)路徑加進(jìn)PATH變量中:

[zzl@localhost]export PATH=$PATH :/opt/crosstool/gcc-3.4.1-glibc-2.3.3/arm-softfloat-linux-gnu/bin

如果每次都要輸入上面的shell命令,的確是比較煩人的事情。我們可以在linux啟動(dòng)腳本中添加該語句。從而避免每次開機(jī)后重新輸入。我是在啟動(dòng)腳本/etc/profile中添加了環(huán)境變量。

找到這一行export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE  INPUTRC

在其上面一行添加:

PATH=$PATH :/opt/crosstool/gcc-3.4.1-glibc-2.3.3/arm-softfloat-linux-gnu/bin

 

今后我們編譯程序的時(shí)候,就用arm-softfloat-linux-gnu-gcc 來編譯我們的程序。

當(dāng)然,應(yīng)用程序的調(diào)試是開發(fā)過程中必不可少的環(huán)節(jié)之一。Linux下的GNU的調(diào)試器即是GDB。所以我們有了這個(gè)交叉編譯工具鏈之后,可以用它來編譯gdbgdbserver。如果你暫時(shí)不需要GDB的話,也可以先略過這一步。

GDB的編譯安裝

目前比較新的是版本是GDB6.6。其官方網(wǎng)站是http://www.gnu.org/software/gdb/

下載gdb-6.6.tar.gz源代碼包到/usr/src下。

[root@localhost]tar –zxvf gdb-6.6.tar.gz

[root@localhost]cd gdb-6.6

配置很簡(jiǎn)單,只需要指定目標(biāo)板體系結(jié)構(gòu)和安裝路徑即可。

[root@localhost]mkdir /opt/crosstool/gcc-3.4.1-glibc-2.3.3/arm-softfloat-linux-gnu/gdb6.6

[root@localhost]./configure  --target=arm-softfloat-linux-gnu  --prefix=/opt/crosstool/gcc-3.4.1-glibc-2.3.3/arm-softfloat-linux-gnu/gdb6.6 -v

[root@localhost]make

[root@localhost]make install

順利的話,則在gdb6.6下生成新的目錄,其中gdb工具就在bin目錄下。

[root@localhost]ls –l /opt/crosstool/gcc-3.4.1-glibc-2.3.3/arm-softfloat-linux-gnu/gdb6.6

/bin

總用量 30476

-rwxr-xr-x    1 root     root     14335251 12 29 15:53 arm-softfloat-linux-gnu-gdb

-rwxr-xr-x    1 root     root     14335296 12 29 15:53 arm-softfloat-linux-gnu-gdbtui

-rwxr-xr-x    1 root     root      2489663 12 29 15:52 arm-softfloat-linux-gnu-run

同樣在環(huán)境變量中添加gdb的路徑

[root@localhost]export PATH=$PATH :/opt/crosstool/gcc-3.4.1-glibc-2.3.3/arm-softfloat-linux-gnu/gdb6.6/bin

今后調(diào)試程序的時(shí)候,用arm-softfloat-linux-gnu-gdb 來調(diào)試。

gdbserver的編譯

[root@localhost]cd gdb-6.6

[root@localhost]cd gdb/gdbserver

[root@localhost] ./configure --target=arm-softfloat-linux-gnu -host=arm-softfloat-linux-gnu

[root@localhost] make CC=/opt/crosstool/gcc-3.4.1-glibc-2.3.3/arm-softfloat-linux-gnu/bin/arm-softfloat-linux-gnu-gcc

如果不出錯(cuò)的話,將在當(dāng)前目錄下生成兩個(gè)可執(zhí)行文件:gdbservergdbreplay。以后就可以用gdb+gdbserver調(diào)試我們開發(fā)板上的程序了。至此,我們的交叉編譯工具鏈已經(jīng)基本建立。可以用來作為我們bootloader的編譯環(huán)境了。

 

GDB+GDBServer的使用

在目標(biāo)系統(tǒng)上啟動(dòng)gdbserver,其實(shí)就是在超級(jí)終端下或者minicom下啟動(dòng)gdbserver。這里將gdbserver放在宿主機(jī)的NFS設(shè)置的共享目錄下/home/zzl,該目錄掛載在目標(biāo)板/work下。宿主機(jī)的ip192.168.1.1,目標(biāo)板的ip192.168.1.33

超級(jí)終端或者minicom

[root@localhost]cd /work

[root@localhost]./gdbserver 192.168.1.1:1234 hello

出現(xiàn)提示:
Process /work/hello created: pid=69
Listening on port 1234

這時(shí)切換到宿主機(jī)的控制臺(tái),運(yùn)行

[root@localhost] arm-softfloat-linux-gnu-gdb hello

(gdb) target remote 192.168.2.33:1234

出現(xiàn)提示:
Remote debugging using 192.168.1.33:1234
[New thread 80]
[Switching to thread 80]
0x40002a90 in ??()

同時(shí)在minicom下提示:
Remote debugging from host 192.168.2.100
(gdb)

連接成功,這時(shí)候就可以輸入各種gdb命令如list、continuenext、stepbreak等進(jìn)行程序調(diào)試了。

 

對(duì)于GDBServer出現(xiàn)的問題

1.  GDBServer調(diào)試時(shí)出現(xiàn)packet error 問題。

主要是虛擬機(jī)與目標(biāo)機(jī)的網(wǎng)絡(luò)連接要經(jīng)過windows,數(shù)據(jù)包容易丟失。換到Linux系統(tǒng)下則恢復(fù)正常。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
陳渝大俠翻譯的 uClinux2.6入門
arm GNU 交叉工具鏈的介紹與使用
arm-linux-gdb gdbserver雙串口目標(biāo)機(jī)調(diào)試心得
Ubuntu 10.04安裝交叉編譯器
ubuntu10.04下建立交叉編譯工具鏈(支持軟浮點(diǎn))全過程
在ARM Linux上使用OpenGL(轉(zhuǎn))
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服