免费色播,亚洲国产欧美国产第一区二区三区,毛片看,日本精品在线观看视频,国产成人精品一区二区免费视频,日本黄色免费网站,一级毛片免费

超經(jīng)典!工程師嵌入式Linux自學筆記及體會

來源:網(wǎng)絡

點擊:1042

A+ A-

所屬頻道:新聞中心

關鍵詞:嵌入式技術,Linux,應用程序代碼

      針對初學嵌入式的廣大朋友們,以下是我在初學接觸嵌入式的過程中整理處的一些資料信息,希望能為大家有所幫助。

      一個典型的桌面 Linux 系統(tǒng)包括 3 個主要的軟件層---linux內(nèi)核、C庫和應用程序代碼。

      內(nèi)核是唯一可以完全控制硬件的層,內(nèi)核驅(qū)動程序代表應用程序與硬件之間進行會話。內(nèi)核之上是C庫,負責把 POSIX API 轉(zhuǎn)換為內(nèi)核可以識別的形式,然后調(diào)用內(nèi)核,從應用程序向內(nèi)核傳遞參數(shù)。應用程序依靠驅(qū)動內(nèi)核來完成特定的任務。

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

      快速入門

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

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

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

      基礎知識

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

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

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

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

      做個試驗:

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

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

      我們使用一張軟盤啟動一臺假象的只有一個串口,鍵盤輸入,顯示輸出的x86 架構的 linux 系統(tǒng),執(zhí)行的特定應用就是運行 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 內(nèi)核(需要系統(tǒng)安裝內(nèi)核文件包)

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

      步驟:

      cd /usr/src/linux

      make mrproper

      make xconfig

      make dep && make bzImage

      得到 /usr/src/linux/arch/i386/boot/目錄的內(nèi)核文件 bzIamge。

      2、編譯一個靜態(tài)的 minicom ,把它作為將來的 linuxrc

      cd minicom-xx/src

      vi Makefile

      修改下面這行

      minicom: $(minicom_OBJECTS) $(minicom_DEPENDENCIES)

      rm -f minicom 下面的行加上 -static,連接為靜態(tài)程序

     ?。↙INK) -static $(minicom_LDFLAGS) $(minicom_OBJECTS) $(minicom_LDADD) $(LIBS)

      vi minicom.c

      找到 if (real_uid==0 && dosetup==0 ) 刪除這個判斷條件語句,主要是用于權限判斷的,因為這個嵌入應用不關注權限問題,否則會出錯。

      make

      得到可執(zhí)行程序,用 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、制作軟盤引導,并拷貝文件 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

      執(zhí)行 grub,在軟盤上創(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

      卸下軟盤

      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 的運行畫面出現(xiàn)在屏幕上。

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

    (審核編輯: 智匯張瑜)

    聲明:除特別說明之外,新聞內(nèi)容及圖片均來自網(wǎng)絡及各大主流媒體。版權歸原作者所有。如認為內(nèi)容侵權,請聯(lián)系我們刪除。