<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 學(xué)習方法與實(shí)踐 > 嵌入式linux快速入門(mén)

嵌入式linux快速入門(mén)

——
作者: 時(shí)間:2007-04-19 來(lái)源: 收藏

一個(gè)典型的桌面系統包括3個(gè)主要的軟件層---linux內核、C庫和應用程序代碼。
內核是唯一可以完全控制硬件的層,內核驅動(dòng)程序代表應用程序與硬件之間進(jìn)行會(huì )話(huà)。內核之上是C庫,負責把POSIX API轉換為內核可以識別的形式,然后調用內核,從應用程序向內核傳遞參數。應用程序依靠驅動(dòng)內核來(lái)完成特定的任務(wù)。
在設計應用的時(shí)候,可以不按照這種層次,應用程序越過(guò)C庫直接和內核會(huì )話(huà),或者把應用和內核捆綁在一起,甚至可以把應用寫(xiě)為內核的一個(gè)線(xiàn)程,在內核中運行,雖然這樣在移植上帶來(lái)了困難,但考慮系統對尺寸要求小的特點(diǎn),是完全可行的。不過(guò)我們使用三層軟件結構的模式來(lái)學(xué)習linux將會(huì )是我們認識更清晰,簡(jiǎn)單可行并使應用具有彈性。

快速入門(mén),最簡(jiǎn)單的建立嵌入式應用的方法就是從我們使用的桌面入手,安裝一個(gè)喜愛(ài)的版本,把我們的某個(gè)應用作為初始化的一部分,框架就算完成了。當然,嵌入式linux應用遠比我們的桌面版本功能簡(jiǎn)單專(zhuān)一,它也許就是一個(gè)用于足彩的終端機,或是一個(gè)數碼音頻播放器,這些系統除了使用嵌入式CPU外,僅僅再需要一個(gè)串口,網(wǎng)口等少量的輸入輸出接口就可以完成它們特定的應用了。在軟件上,它可以按照三層的概念由內核裝載器,定制的內核和較少的為特定任務(wù)設計的靜態(tài)連接的應用程序組成。之所以使用靜態(tài)連接的應用程序,是因為少量的靜態(tài)連接程序所要的存儲空間,比同樣數量的動(dòng)態(tài)連接的程序所占的空間小,這個(gè)平衡點(diǎn)需要我們在實(shí)際開(kāi)發(fā)中去獲取。也許你正在設計的是個(gè)PDA,它的應用程序較多,那么你很可能就要使用動(dòng)態(tài)連接程序來(lái)減少存儲空間。在你的/bin或者/sbin目錄下,用廠(chǎng)列表看看bash,ifconfig,vi...,也許只用幾十K,當你運行 ldd /bin/bash 時(shí),你會(huì )看到它們都和好幾個(gè)庫文件相連。好了,這樣看來(lái),我們得把PC想像成一個(gè)嵌入式硬件平臺,再重新制作一個(gè)特定功能的嵌入式linux。

再進(jìn)行實(shí)際操作之前,先來(lái)搞清楚幾個(gè)基礎知識。
內核裝載器Loader,它的作用是把內核從外部存儲器,移動(dòng)到內存中。它只作這個(gè)事情,一旦完成了調入內核的工作,Loader就跳轉到內核位置開(kāi)始執行。不同架構有不同的Loader,在x86結構的PC上,通常使用的loader有LILO,GRUB,syslinux,syslinux在嵌入式 linux中也同樣工作。其他非x86架構的應用中,你必須使用專(zhuān)門(mén)的loader,或者自己編寫(xiě)loader來(lái)裝入內核。也有不使用loader的情況,系統加電以后,內核直接從燒錄有映象的Flash上開(kāi)始執行。
內核,一旦內核開(kāi)始執行,它將通過(guò)驅動(dòng)程序初始化所有硬件,這可以從我們的pc機監視器的輸出看出來(lái),每個(gè)驅動(dòng)程序都打印一些有關(guān)它的信息。初始化完成后,計算機就準備運行嵌入式應用。也許一個(gè),也許是多個(gè)應用程序組成了嵌入式應用,但通常首先調用的是init(通過(guò)loader 向核心傳入init=/program 可以定制首先運行的程序)。桌面linux中,init會(huì )讀取/etc/inittab文件,來(lái)決定執行級別和哪些腳本和命令。嵌入式應用中,可以根據實(shí)際的情況決定是否使用標準的init執行方式,也許這個(gè)init是個(gè)靜態(tài)程序,它能夠完成我們的嵌入應用的特定任務(wù),那完全不用考慮inittab了。
initrd文件系統,initrd以一種把內核從存儲介質(zhì)裝入到內存的相同的機制來(lái)裝入一個(gè)小型文件系統。這個(gè)文件系統最好是以壓縮的方式存儲在介質(zhì)上的,解壓縮到RAM盤(pán)上。通過(guò)使用initrd,包含有核心驅動(dòng)和啟動(dòng)腳本的小文件系統,就可以直接從介質(zhì)上和內核一起啟動(dòng)起來(lái),內核屆壓縮這個(gè)文件系統,并執行這個(gè)文件系統上叫做/linuxrc的腳本文件,這個(gè)腳本通常會(huì )把啟動(dòng)過(guò)程中所需要的驅動(dòng)程序裝入。腳本退出以后,initrd文件系統也卸下了,啟動(dòng)過(guò)程進(jìn)入真正初始化過(guò)程。對于嵌入式來(lái)講,可以將需要的應用軟件都運行在這個(gè)initrd文件系統上,只要/linxrc文件不結束,內核啟動(dòng)過(guò)程的其他部分就不會(huì )繼續。
做個(gè)試驗:
cp /boot/initrd-2.4.20.img /tmp
cd /tmp
mv initrd-2.4.2-.img initrd.img.gz
gunzip initrd.img.gz
mount -o loop initrd.img /mnt
cd /mnt
ls
cat linuxrc 可以看到里面執行了加載了兩個(gè)模塊的操作,你在啟動(dòng)linxu的時(shí)候會(huì )看見(jiàn)屏幕打印信息。

入門(mén)試驗,制作一個(gè)簡(jiǎn)單的應用:我們使用一張軟盤(pán)啟動(dòng)一臺假象的只有一個(gè)串口,鍵盤(pán)輸入,顯示輸出的x86架構的linux系統,執行的特定應用就是運行 minicom,通過(guò)串口撥號。需要軟件: minicom-xx.src.tar.gz 和 syslinux-xx.tar.gz,xx代表版本號,開(kāi)始之前,在主目錄建立一個(gè)目錄,來(lái)釋放這兩個(gè)軟件包:
cd
mkdir -p project/minilinux
cd project/minilinux
tar zxvf minicom-xx.src.tar.gz
tar zxvf syslinux-xx.tar.gz

1、裁減linux內核(需要系統安裝內核文件包)

配置內核的時(shí)候,我們需要選擇這些:摸塊編入內核,386處理器、物理內存off、支持ELF、標準PC軟盤(pán)、支持RAM盤(pán)(4096)、支持 initial RAM disk (initrd)、虛你終端、虛擬終端控制臺、標準串口、ext2文件系統、控制臺驅動(dòng),VGA text console、DOS FAT、MSDOS文件系統,其他的都可以不要,這樣內核編出來(lái)較小。
步驟:
cd /usr/src/linux
make mrproper
make xconfig
make dep && make bzImage
得到 /usr/src/linux/arch/i386/boot/目錄的內核文件bzIamge。

2、編譯一個(gè)靜態(tài)的minicom ,把它作為將來(lái)的linuxrc
cd minicom-xx/src
vi Makefile
修改下面這行
minicom: $(minicom_OBJECTS) $(minicom_DEPENDENCIES)
rm -f minicom 下面的行加上 -static,連接為靜態(tài)程序
(LINK) -static $(minicom_LDFLAGS) $(minicom_OBJECTS) $(minicom_LDADD) $(LIBS)

vi minicom.c
找到 if (real_uid==0 && dosetup==0 ) 刪除這個(gè)判斷條件語(yǔ)句,主要是用于權限判斷的,因為這個(gè)嵌入應用不關(guān)注權限問(wèn)題,否則會(huì )出錯。
make
得到可執行程序,用ldd 檢查一下是不是靜態(tài)程序。

3、準備initrd壓縮文件image.gz
dd if=/dev/zero of="image" bs="1k" count="4096"
losetup /dev/loop0 image
mke2fs -m 0 /dev/loop0
mounmt -t ext2 /dev/loop0 /mnt/
mkdir -p /mnt/dev
mkdir -p /mnt/usr/share/terminfo/l/
cd /dev
cp -a consle null tty tty0 zero mem /mnt/dev
cp -P /usr/share/terminfo/l/linux /mnt/usr/share/terminfo/l/linux
cp ~/project/minilinux/mincom/src/minicom /mnt/linuxrc
umount /mnt
losetup -d /dev/loop0
sync
gzip -9 image

4、制作軟盤(pán)引導,并拷貝文件 bzimage image.gz 到軟盤(pán)

A.使用grub
fdformat /dev/fd0
mke2fs /dev/fd0
mount /mnt/fd0 /mnt/floppy
mkdir -p /mnt/floppy/boot/grub
cp /boot/grub/stage1 /boot/grub/stage2 /mnt/floppy/boot/grub
執行 grub,在軟盤(pán)上創(chuàng )建引導
grub > root (fd0)
grub > setup (fd0)
grub > quit

cp /usr/src/linux/arch/i386/boot/bzImge /mnt/floppy
cp ~/porject/minilinux/image.gz /mnt/floppy

編輯 /mnt/floppy/boot/grub/grub.conf
default =0
timeout-=10
title minilinux
root (fd0)
kernel /bzImage
initrd /image.gz

卸下軟盤(pán)
umount /mnt/floppy


B. 使用syslinux
fdformat /dev/fd0
mkfs.msdos /dev/fd0
mount -t msdos /dev/fd0 /mnt/floppy

cp /usr/src/linux/arch/i386/boot/bzImge /mnt/floppy
cp ~/porject/minilinux/image.gz /mnt/floppy

cp syslinux-xx/ldlinxu.sys /mnt/floppy
cat > /mnt/floppy/syslinux.cfg
LABEL linux
KERNEL bzimage
APPEND initrd="image".gz

umont /mnt/floppy
syslinux-xx/syslinux /dev/fd0
sync

5、用軟盤(pán)啟動(dòng)計算機,如果幸運,minicom的運行畫(huà)面出現在屏幕上。

到此,我們的單應用嵌入式linux做好了,但它還很簡(jiǎn)陋,沒(méi)有什么實(shí)際用途,但通過(guò)這個(gè)實(shí)驗,可以了解嵌入式系統的大致結構和開(kāi)發(fā)過(guò)程。在進(jìn)行實(shí)際的嵌入式開(kāi)發(fā)時(shí),通常要在PC機上借助嵌入式linux開(kāi)發(fā)工具包,如:uclinux,bluecat等,對相應的硬件平臺(目標機)進(jìn)行軟件編寫(xiě)編譯,調試成功后,將內核及應用程序寫(xiě)入到目標機的存儲器中,從而完成整個(gè)應用。


 

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


關(guān)鍵詞: Linux 嵌入式

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>