青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-80  評論-22  文章-0  trackbacks-0
一個典型的桌面Linux系統包括3個主要的軟件層---linux內核、C庫和應用程序代碼。內核是唯一可以完全控制硬件的層,內核驅動程序代表應用程序與硬件之間進行會話。內核之上是C庫,負責把POSIX API轉換為內核可以識別的形式,然后調用內核,從應用程序向內核傳遞參數。應用程序依靠驅動內核來完成特定的任務。

在設計嵌入式應用的時候,可以不按照這種層次,應用程序越過C庫直接和內核會話,或者把應用和內核捆綁在一起,甚至可以把應用寫為內核的一個線程,在內核中運行,雖然這樣在移植上帶來了困難,但考慮嵌入式系統對尺寸要求小的特點,是完全可行的。不過我們使用三層軟件結構的模式來學習嵌入式linux將會是我們認識更清晰,簡單可行并使應用具有彈性。

快速入門

最簡單的建立嵌入式Linux應用的方法就是從我們使用的桌面Linux入手,安裝一個喜愛的版本,把我們的某個應用作為初始化的一部分,框架就算完成了。

當然,嵌入式linux應用遠比我們的桌面版本功能簡單專一,它也許就是一個用于足彩的終端機,或是一個數碼音頻播放器,這些系統除了使用嵌入式CPU外,僅僅再需要一個串口,網口等少量的輸入輸出接口就可以完成它們特定的應用了。

在軟件上,它可以按照三層的概念由內核裝載器,定制的內核和較少的為特定任務設計的靜態連接的應用程序組成。之所以使用靜態連接的應用程序,是因為少量的靜態連接程序所要的存儲空間,比同樣數量的動態連接的程序所占的空間小,這個平衡點需要我們在實際開發中去獲取。也許你正在設計的是個PDA,它的應用程序較多,那么你很可能就要使用動態連接程序來減少存儲空間。在你的/bin或者/sbin目錄下,用廠列表看看bash,ifconfig,vi...,也許只用幾十K,當你運行 ldd /bin/bash 時,你會看到它們都和好幾個庫文件相連。好了,這樣看來,我們得把PC想像成一個嵌入式硬件平臺,再重新制作一個特定功能的嵌入式linux。

基礎知識

再進行實際操作之前,先來搞清楚幾個基礎知識。


內核裝載器Loader,它的作用是把內核從外部存儲器,移動到內存中。它只作這個事情,一旦完成了調入內核的工作,Loader就跳轉到內核位置開始執行。不同架構有不同的 Loader,在x86結構的PC上,通常使用的loader有LILO,GRUB,syslinux,syslinux在嵌入式linux中也同樣工 作。其他非x86架構的應用中,你必須使用專門的loader,或者自己編寫loader來裝入內核。也有不使用loader的情況,系統加電以后,內核 直接從燒錄有映象的Flash上開始執行。


內核,一旦內核開始執行,它將通過驅動程序初始化所有硬件,這可以從我們的pc機監視器的輸出看出 來,每個驅動程序都打印一些有關它的信息。初始化完成后,計算機就準備運行嵌入式應用。也許一個,也許是多個應用程序組成了嵌入式應用,但通常首先調用的 是init(通過loader 向核心傳入init=/program 可以定制首先運行的程序)。桌面linux中,init會讀取/etc/inittab文件,來決定執行級別和哪些腳本和命令。嵌入式應用中,可以根據實 際的情況決定是否使用標準的init執行方式,也許這個init是個靜態程序,它能夠完成我們的嵌入應用的特定任務,那完全不用考慮inittab了。


initrd 文件系統,initrd以一種把內核從存儲介質裝入到內存的相同的機制來裝入一個小型文件系統。這個文件系統最好是以壓縮的方式存儲在介質上的,解壓縮到 RAM盤上。通過使用initrd,包含有核心驅動和啟動腳本的小文件系統,就可以直接從介質上和內核一起啟動起來,內核屆壓縮這個文件系統,并執行這個 文件系統上叫做/linuxrc的腳本文件,這個腳本通常會把啟動過程中所需要的驅動程序裝入。腳本退出以后,initrd文件系統也卸下了,啟動過程進 入真正初始化過程。對于嵌入式來講,可以將需要的應用軟件都運行在這個initrd文件系統上,只要/linxrc文件不結束,內核啟動過程的其他部分就不會繼續。 


做個試驗:
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 可以看到里面執行了加載了兩個模塊的操作,你在啟動linxu的時候會看見屏幕打印信息。



入門試驗,制作一個簡單的應用

我們使用一張軟盤啟動一臺假象的只有一個串口,鍵盤輸入,顯示輸出的x86架構的linux系統,執行的特定應用就是運行minicom,通過串口撥號。需 要軟件: minicom-xx.src.tar.gz 和 syslinux-xx.tar.gz,xx代表版本號 ,開始之前,在主目錄建立一個目錄,來釋放這兩個軟件包: 


cd
mkdir -p project/minilinux
cd project/minilinux
tar zxvf minicom-xx.src.tar.gz
tar zxvf syslinux-xx.tar.gz

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

配置內核的時候,我們需要選擇這些:摸塊編入內核,386處理器、物理內存off、支持ELF、標準PC軟盤、支持RAM盤(4096)、支持 initial RAM disk (initrd)、虛你終端、虛擬終端控制臺、標準串口、ext2文件系統、控制臺驅動,VGA text console、DOS FAT、MSDOS文件系統,其他的都可以不要,這樣內核編出來較小。 


步驟:
cd /usr/src/linux
make mrproper
make xconfig
make dep && make bzImage
得到 /usr/src/linux/arch/i386/boot/目錄的內核文件bzIamge。

2、編譯一個靜態的minicom,把它作為將來的linuxrc 


cd minicom-xx/src
vi Makefile
修改下面這行
minicom: $(minicom_OBJECTS) $(minicom_DEPENDENCIES)
rm -f minicom 下面的行加上 -static,連接為靜態程序
(LINK) -static $(minicom_LDFLAGS) $(minicom_OBJECTS) $(minicom_LDADD) $(LIBS)

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

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、制作軟盤引導,并拷貝文件 bzimage image.gz 到軟盤

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,在軟盤上創建引導
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

卸下軟盤
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、用軟盤啟動計算機,如果幸運,minicom的運行畫面出現在屏幕上。

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

posted on 2012-04-24 14:01 Bluesea 閱讀(671) 評論(0)  編輯 收藏 引用 所屬分類: 嵌入式開發
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久精品国产久精国产思思| 国产精品久久久久77777| 欧美成人精品激情在线观看| 欧美在线观看网址综合| 亚洲一区在线视频| 亚洲午夜一二三区视频| 亚洲伊人网站| 久久成人这里只有精品| 性做久久久久久久免费看| 亚洲欧美中文日韩在线| 欧美一区二区成人| 久久裸体艺术| 欧美v日韩v国产v| 亚洲日本免费| 日韩亚洲精品视频| 亚洲一区二区三区在线看| 亚洲女女做受ⅹxx高潮| 久久久久久久久久久久久女国产乱| 久久久久久久激情视频| 99精品欧美一区二区蜜桃免费| 欧美激情视频给我| 欧美日韩免费观看中文| 国产精品视频免费观看www| 国产日韩精品一区二区| ●精品国产综合乱码久久久久| 亚洲九九九在线观看| 宅男在线国产精品| 欧美一区二区三区精品| 欧美成人激情在线| 一区二区日韩免费看| 欧美在线观看日本一区| 欧美激情影音先锋| 国内精品写真在线观看| 99国产精品国产精品久久| 欧美一区二区视频免费观看| 欧美大片第1页| 一区二区三区视频在线| 久久亚洲综合色一区二区三区| 欧美日韩免费| 激情文学综合丁香| 亚洲综合视频1区| 欧美成年人网站| 亚洲欧美另类国产| 欧美女同视频| 亚洲国产精品久久久久秋霞影院 | 91久久精品一区二区别| 亚洲综合视频网| 亚洲国产精品va在看黑人| 欧美一级视频精品观看| 欧美色另类天堂2015| 亚洲日本久久| 免费观看久久久4p| 欧美一区二区成人| 国产精品久久久一区二区三区| 亚洲人精品午夜| 欧美成人亚洲成人| 久久五月激情| 亚洲二区在线| 欧美成人三级在线| 猛干欧美女孩| 亚洲精品一区二区三区蜜桃久 | 欧美日韩一级大片网址| 亚洲精品视频一区二区三区| 欧美国产精品久久| 免费成人av资源网| 亚洲片国产一区一级在线观看| 久久亚洲国产精品一区二区| 久久不射网站| 亚洲国产裸拍裸体视频在线观看乱了| 久久婷婷丁香| 久久综合一区| 每日更新成人在线视频| 在线亚洲精品| 欧美色精品在线视频| 一区二区三区色| 亚洲精品女人| 久久精品国产精品亚洲综合| 国产色综合天天综合网| 中文在线一区| 亚洲午夜在线视频| 欧美日精品一区视频| 日韩一区二区久久| 亚洲欧洲日产国码二区| 欧美国产免费| 日韩亚洲欧美精品| 欧美一区二区三区喷汁尤物| 久久国产精品色婷婷| 韩国成人理伦片免费播放| 久久精品五月| 久久综合给合久久狠狠狠97色69| 国内精品久久久久久影视8 | 久久成人精品| 久久久久久999| 亚洲国产精品va在线看黑人 | 亚洲精品免费看| 欧美大片免费看| 蜜臀久久99精品久久久画质超高清 | 亚洲欧美国产毛片在线| 国产精品系列在线| 久久精品91| 久久免费99精品久久久久久| 激情视频一区二区| 亚洲国产精品一区二区www| 欧美噜噜久久久xxx| 中文精品在线| 久久影院亚洲| 亚洲特色特黄| 性欧美1819sex性高清| 国产亚洲精品久久久| 女女同性女同一区二区三区91| 另类成人小视频在线| 9l视频自拍蝌蚪9l视频成人| 亚洲一区二区久久| 国外成人在线| 欧美ed2k| 国产欧美一区二区精品秋霞影院| 久久综合伊人77777尤物| 麻豆精品视频| 亚洲欧美久久| 美女91精品| 午夜精品视频在线观看一区二区| 欧美专区在线| 99精品国产高清一区二区| 久久国内精品视频| 日韩一级精品视频在线观看| 亚洲欧美日韩精品| 久久亚洲影音av资源网| 国产精品igao视频网网址不卡日韩| 欧美一区二区三区久久精品茉莉花 | 久久亚洲欧洲| 欧美一级精品大片| 牛人盗摄一区二区三区视频| 性欧美大战久久久久久久免费观看| 久久久久一区| 欧美影院久久久| 欧美日韩国产影院| 欧美国产91| 国内精品久久久久久久影视蜜臀 | 亚洲欧美中文另类| 一本一本久久| 欧美黄色一级视频| 久久综合狠狠综合久久综合88 | 亚洲欧美清纯在线制服| 欧美成人免费一级人片100| 久久免费视频在线观看| 国产精品入口夜色视频大尺度| 蜜臀a∨国产成人精品| 黄色综合网站| 欧美一区二区三区免费大片| 亚洲一区二区在线免费观看| 欧美福利电影网| 免费成人毛片| 香蕉久久夜色| 欧美性大战xxxxx久久久| 亚洲免费网站| 欧美一级在线视频| 欧美视频一区二区三区四区| 亚洲乱码久久| 亚洲少妇一区| 国产精品v日韩精品| 亚洲欧美中日韩| 狠狠色狠色综合曰曰| 久久精品人人做人人综合| 久久精品1区| 伊人久久大香线蕉综合热线| 久久久久欧美| 亚洲国产免费| 最新日韩精品| 欧美香蕉大胸在线视频观看| 一区二区三区国产在线观看| 亚洲图片欧美一区| 国产精品jvid在线观看蜜臀| 亚洲私拍自拍| 久久久久免费观看| 国产精品亚洲综合| 六月丁香综合| 亚洲美女啪啪| 99精品99久久久久久宅男| 久久高清一区| 欧美激情视频在线播放| 国产亚洲一二三区| 玖玖综合伊人| 99精品国产在热久久婷婷| 欧美亚洲日本一区| 精品动漫3d一区二区三区免费版 | 最新成人av网站| 欧美精品综合| 亚洲一区二区三区影院| 麻豆成人综合网| 伊伊综合在线| 国产精品永久免费观看| 久久在线免费观看视频| 日韩一区二区精品视频| 欧美在线精品免播放器视频| 亚洲第一精品在线| 欧美日韩免费观看一区三区| 牛人盗摄一区二区三区视频| 亚洲在线免费观看| 亚洲第一区在线观看| 欧美一区二区三区另类|