国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

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

發(fā)布時(shí)間:2016-1-28 09:59    發(fā)布者:designapp
關(guān)鍵詞: Linux ,
  針對(duì)初學(xué)嵌入式的廣大朋友們,以下是我在初學(xué)接觸嵌入式的過程中整理處的一些資料信息,希望能為大家有所幫助。
  一個(gè)典型的桌面 Linux 系統(tǒng)包括 3 個(gè)主要的軟件層---linux 內(nèi)核、C 庫和應(yīng)用程序代碼。
  內(nèi)核是唯一可以完全控制硬件的層,內(nèi)核驅(qū)動(dòng)程序代表應(yīng)用程序與硬件之間進(jìn)行會(huì)話。內(nèi)核之上是 C 庫,負(fù)責(zé)把 POSIX API 轉(zhuǎn)換為內(nèi)核可以識(shí)別的形式,然后調(diào)用內(nèi)核,從應(yīng)用程序向內(nèi)核傳遞參數(shù)。應(yīng)用程序依靠驅(qū)動(dòng)內(nèi)核來完成特定的任務(wù)。
  在設(shè)計(jì)嵌入式應(yīng)用的時(shí)候,可以不按照這種層次,應(yīng)用程序越過 C 庫直接和內(nèi)核會(huì)話,或者把應(yīng)用和內(nèi)核捆綁在一起,甚至可以把應(yīng)用寫為內(nèi)核的一個(gè)線程,在內(nèi)核中運(yùn)行,雖然這樣在移植上帶來了困難,但考慮嵌入式系統(tǒng)對(duì)尺寸要求小的特點(diǎn),是完全可行的。不過我們使用三層軟件結(jié)構(gòu)的模式來學(xué)習(xí)嵌入式 linux將會(huì)是我們認(rèn)識(shí)更清晰,簡單可行并使應(yīng)用具有彈性。
  快速入門
  最簡單的建立嵌入式 Linux 應(yīng)用的方法就是從我們使用的桌面 Linux 入手,安裝一個(gè)喜愛的版本,把我們的某個(gè)應(yīng)用作為初始化的一部分,框架就算完成了。
  當(dāng)然,嵌入式 linux 應(yīng)用遠(yuǎn)比我們的桌面版本功能簡單專一,它也許就是一個(gè)用于足彩的終端機(jī),或是一個(gè)數(shù)碼音頻播放器,這些系統(tǒng)除了使用嵌入式 CPU外,僅僅再需要一個(gè)串口,網(wǎng)口等少量的輸入輸出接口就可以完成它們特定的應(yīng)用了。
  在軟件上,它可以按照三層的概念由內(nèi)核裝載器,定制的內(nèi)核和較少的為特定任務(wù)設(shè)計(jì)的靜態(tài)連接的應(yīng)用程序組成。之所以使用靜態(tài)連接的應(yīng)用程序,是因?yàn)樯倭康撵o態(tài)連接程序所要的存儲(chǔ)空間,比同樣數(shù)量的動(dòng)態(tài)連接的程序所占的空間小,這個(gè)平衡點(diǎn)需要我們?cè)趯?shí)際開發(fā)中去獲取。也許你正在設(shè)計(jì)的是個(gè) PDA,它的應(yīng)用程序較多,那么你很可能就要使用動(dòng)態(tài)連接程序來減少存儲(chǔ)空間。在你的/bin 或者/sbin 目錄下,用廠列表看看 bash,ifconfig,vi...,也許只用幾十K,當(dāng)你運(yùn)行 ldd /bin/bash 時(shí),你會(huì)看到它們都和好幾個(gè)庫文件相連。好了,這樣看來,我們得把 PC 想像成一個(gè)嵌入式硬件平臺(tái),再重新制作一個(gè)特定功能的嵌入式 linux。
  基礎(chǔ)知識(shí)
  再進(jìn)行實(shí)際操作之前,先來搞清楚幾個(gè)基礎(chǔ)知識(shí)。
  內(nèi)核裝載器 Loader,它的作用是把內(nèi)核從外部存儲(chǔ)器,移動(dòng)到內(nèi)存中。它只作這個(gè)事情,一旦完成了調(diào)入內(nèi)核的工作,Loader 就跳轉(zhuǎn)到內(nèi)核位置開始執(zhí)行。不同架構(gòu)有不同的 Loader,在 x86 結(jié)構(gòu)的 PC 上,通常使用的 loader 有LILO,GRUB,syslinux,syslinux 在嵌入式 linux 中也同樣工作。其他非 x86 架構(gòu)的應(yīng)用中,你必須使用專門的 loader,或者自己編寫 loader 來裝入內(nèi)核。也有不使用 loader 的情況,系統(tǒng)加電以后,內(nèi)核直接從燒錄有映象的 Flash 上開始執(zhí)行。
  內(nèi)核,一旦內(nèi)核開始執(zhí)行,它將通過驅(qū)動(dòng)程序初始化所有硬件,這可以從我們的 pc 機(jī)監(jiān)視器的輸出看出來,每個(gè)驅(qū)動(dòng)程序都打印一些有關(guān)它的信息。初始化完成后,計(jì)算機(jī)就準(zhǔn)備運(yùn)行嵌入式應(yīng)用。也許一個(gè),也許是多個(gè)應(yīng)用程序組成了嵌入式應(yīng)用,但通常首先調(diào)用的是 init(通過 loader 向核心傳入init=/program 可以定制首先運(yùn)行的程序)。桌面 linux 中,init 會(huì)讀取/etc/inittab 文件,來決定執(zhí)行級(jí)別和哪些腳本和命令。嵌入式應(yīng)用中,可以根據(jù)實(shí)際的情況決定是否使用標(biāo)準(zhǔn)的 init 執(zhí)行方式,也許這個(gè) init 是個(gè)靜態(tài)程序,它能夠完成我們的嵌入應(yīng)用的特定任務(wù),那完全不用考慮 inittab 了。
  initrd 文件系統(tǒng),initrd 以一種把內(nèi)核從存儲(chǔ)介質(zhì)裝入到內(nèi)存的相同的機(jī)制來裝入一個(gè)小型文件系統(tǒng)。這個(gè)文件系統(tǒng)最好是以壓縮的方式存儲(chǔ)在介質(zhì)上的,解壓縮到 RAM 盤上。通過使用 initrd,包含有核心驅(qū)動(dòng)和啟動(dòng)腳本的小文件系統(tǒng),就可以直接從介質(zhì)上和內(nèi)核一起啟動(dòng)起來,內(nèi)核屆壓縮這個(gè)文件系統(tǒng),并執(zhí)行這個(gè)文件系統(tǒng)上叫做/linuxrc 的腳本文件,這個(gè)腳本通常會(huì)把啟動(dòng)過程中所需要的驅(qū)動(dòng)程序裝入。腳本退出以后,initrd 文件系統(tǒng)也卸下了,啟動(dòng)過程進(jìn)入真正初始化過程。對(duì)于嵌入式來講,可以將需要的應(yīng)用軟件都運(yùn)行在這個(gè)initrd 文件系統(tǒng)上,只要/linxrc 文件不結(jié)束,內(nèi)核啟動(dòng)過程的其他部分就不會(huì)繼續(xù)。
  做個(gè)試驗(yàn):
  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í)行了加載了兩個(gè)模塊的操作,你在啟動(dòng) linxu 的時(shí)候會(huì)看見屏幕打印信息。
  入門試驗(yàn),制作一個(gè)簡單的應(yīng)用
  我們使用一張軟盤啟動(dòng)一臺(tái)假象的只有一個(gè)串口,鍵盤輸入,顯示輸出的x86 架構(gòu)的 linux 系統(tǒng),執(zhí)行的特定應(yīng)用就是運(yùn)行 minicom,通過串口撥號(hào)。需要軟件: minicom-xx.src.tar.gz 和 syslinux-xx.tar.gz,xx 代表版本號(hào),開始之前,在主目錄建立一個(gè)目錄,來釋放這兩個(gè)軟件包:
  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)核的時(shí)候,我們需要選擇這些:摸塊編入內(nèi)核,386 處理器、物理內(nèi)存 off、支持 ELF、標(biāo)準(zhǔn) PC 軟盤、支持 RAM 盤(4096)、支持 initial RAM disk(initrd)、虛你終端、虛擬終端控制臺(tái)、標(biāo)準(zhǔn)串口、ext2 文件系統(tǒng)、控制臺(tái)驅(qū)動(dòng),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、編譯一個(gè)靜態(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 ) 刪除這個(gè)判斷條件語句,主要是用于權(quán)限判斷的,因?yàn)檫@個(gè)嵌入應(yīng)用不關(guān)注權(quán)限問題,否則會(huì)出錯(cuò)。
  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、用軟盤啟動(dòng)計(jì)算機(jī),如果幸運(yùn),minicom 的運(yùn)行畫面出現(xiàn)在屏幕上。
  到此,我們的單應(yīng)用嵌入式 linux 做好了,但它還很簡陋,沒有什么實(shí)際用途,但通過這個(gè)實(shí)驗(yàn),可以了解嵌入式系統(tǒng)的大致結(jié)構(gòu)和開發(fā)過程。在進(jìn)行實(shí)際的嵌入式開發(fā)時(shí),通常要在 PC 機(jī)上借助嵌入式 linux 開發(fā)工具包,如:uclinux,bluecat 等,對(duì)相應(yīng)的硬件平臺(tái)(目標(biāo)機(jī))進(jìn)行軟件編寫編譯,調(diào)試成功后,將內(nèi)核及應(yīng)用程序?qū)懭氲侥繕?biāo)機(jī)的存儲(chǔ)器中,從而完成整個(gè)應(yīng)用。
                               
               
本文地址:http://m.qingdxww.cn/thread-160453-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專區(qū)
  • Dev Tool Bits——使用MPLAB® Discover瀏覽資源
  • Dev Tool Bits——使用條件軟件斷點(diǎn)宏來節(jié)省時(shí)間和空間
  • Dev Tool Bits——使用DVRT協(xié)議查看項(xiàng)目中的數(shù)據(jù)
  • Dev Tool Bits——使用MPLAB® Data Visualizer進(jìn)行功率監(jiān)視
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精品久久久噜噜噜久久7 | 免看一级一片一在线看 | 国产成人精品视频一区二区不卡 | 中文有码在线观看 | 两个人在线观看完整 | 日韩视频免费看 | 日本在线国产 | 免费h漫 | 在线看的毛片 | 毛片在线视频观看 | 日本中文字幕一区二区 | 韩国一级毛片免费完整视频 | 中文字幕 二区 三区 搜查官 | 黑人性hd高清版 | 国产原创麻豆精品视频 | 欧美日韩中文国产一区 | 日韩精品大片 | 韩国一级毛片 | 亚洲一区二区高清 | 国产美女白嫩嫩在线观看 | 日韩成人免费一级毛片 | 四虎成人精品在永久免费 | 2022国产精品福利在线观看 | 91大神在线观看精品一区 | www.99re2| 性夜影院午夜看片 | 免费看一片 | 香蕉视频 在线播放 | 国产噜噜噜精品免费 | 欧美成人免费 | 狠狠88综合久久久久综合网 | 国产一区二区三区国产精品 | 国产91在线播放动漫 | 天天干在线免费视频 | 黄色小视频在线播放 | 欧美另类亚洲 | 国产乱码精品一区二区三区中 | 中文字幕国产 | 欧美成人午夜做受视频 | 国产精品成人久久久久久久 | 精品国产三级a在线观看 |