<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 學(xué)習(xí)嵌入式Linux系統(tǒng)的筆記和體會(2)

          學(xué)習(xí)嵌入式Linux系統(tǒng)的筆記和體會(2)

          ——
          作者: 時間:2007-02-28 來源:天極網(wǎng) 收藏

          入門試驗,制作一個簡單的應(yīng)用

            我們使用一張軟盤啟動一臺假象的只有一個串口,鍵盤輸入,顯示輸出的x86架構(gòu)的linux系統(tǒng),執(zhí)行的特定應(yīng)用就是運行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、標(biāo)準(zhǔn)PC軟盤、支持RAM盤(4096)、支持 initial RAM disk (initrd)、虛你終端、虛擬終端控制臺、標(biāo)準(zhǔn)串口、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)程序
          (LINK) -static $(minicom_LDFLAGS) $(minicom_OBJECTS) $(minicom_LDADD) $(LIBS)

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

            3、準(zhǔn)備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、制作軟盤引導(dǎo),并拷貝文件 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)建引導(dǎo)
          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)在屏幕上。

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


           



          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();