嵌入式系統

1 嵌入式系統組成linux

  BootLoader、內核、根目錄文件系統vim

2 BootLoader網絡

  uboot是嵌入式啓動程序BootLoader的業界老大,因此通常都用uboot。ui

  操做以前先make distclean之前的配置項。spa

2.1 配置uboot3d

  Uboot編譯後要告訴映像運行在什麼系統體系上。配置要在Makefile文件上進行,vim Makefile打開Makefile,若是是210開發板直接搜索 「/210」,而後經過next查詢其餘有用信息。查詢跟開發板匹配的配置項,好比「tq210」;blog

    配置完成ip

2.2 編譯uboot內存

  make ARCH=arm CROSS_COMPILE=arm-linux-開發

  編譯完成後會生成一個uboot.bin 文件,是要燒寫到開發板運行的;是一個二進制映像。

2.3 下載並運行

3 內核

3.1 內核配置(X86爲例)

  爲啥配置內核:經過軟件需求和硬件需求,選出須要的、去掉不用的。硬件方面:好比是arm體系,x86就沒用就不選;軟件方面:好比是ipv4,選ipv6就沒用。

  配置內核的方法:

  make config:基於文本模式的交互式配置

  make menuconfig:基於文本模式的菜單型配置(用這種方法方便、快捷)

  選項菜單:

  三種選擇方式:<>、<*>、<M>

  <>:這次編譯不選擇該功能;

  <M>:module(內核模塊)

  <*>:

  

  內核映像文件最終運行在內存中,系統啓動,BootLoader會將zIMage解壓到內存裏,在內存裏面運行。

  配置完成後用:ls –a查看 (a就是all)能夠看到隱藏的文件,其中.config就是保存的配置文件。

  查看內容:vim  .config

  

    CONFIG:固定的標準格式;LOCALVERSION:配置項的名字;y=yes至關於<*>;沒有配置的加'#',加'is not set';

  如何加載一個已有的配置文件,而後在其上面作修改?

    (Linux自己的配置文件在/boot/config-4.15.0-45-generic),找到一個配置文件config-4.15.0-45-generic複製到當前目錄下,而後make menuconfig -> load -> '文件路徑文件名'(例如當前w文件下的路徑就是"./config-4.15.0-45-generic") -> ok;

3.2 編譯內核

3.2.1 編譯內核生成鏡像文件

  make zImage:主要用於小於512K

  make bzImage:

  make bzImage V=1 :查看編譯的詳細信息

  編譯好的內核位於arch/<cpu>/boot/目錄下 

3.2.2 編譯內核模塊(<M>產生內核模塊)

  make modules:內核模塊散落在各個文件中,.ko文件就是內核模塊,查看方式ls *.ko;

  make modules_install:要把內核模塊放到/lib/modules目錄下面。使用操做:make modules_install會把散落的文件移動到/lib/modules目錄下。

3.3 製做init ramdisk(即將全部內核模塊打包爲一個文件)

  命令:mkinitrd  initrd-$version  $version

  例子:mkinitrd  initrd-2.6.32  2.6.32

            initrd-2.6.32 打包成文件的名字

  $version 爲經過make modules_install移動到一個文件夾的內核模塊文件的文件名,能夠經過查詢/lib/modules下的目錄獲得。

3.4 安裝內核

  將映像文件和打包好的modules文件複製到boot目錄下,Linux啓動的時候BootLoader會到boot目錄下找文件。

3.4.1 複製zImage鏡像文件到boot中

  cp arch/x86/boot/bzImage /boot/vmlinuz-$version 取得名字

3.4.2 複製moduls文件到boot文件中

  cp initrd-$version /boot/

3.4.3 修改/etc/grub.conf     /*這是啓動的配置文件*/

  保存後從新啓動Linux系統。啓動時有一個倒計時的地方,而後當即按下F12(戴爾),能夠選擇系統要啓動內核。

  啓動完成後:

  用 uname –r 命令:查看正在運行的內核版本。

 

  內核運行在內存

  文件系統存放在硬盤或者開發板的flash

3.5 清理內核

要清楚編譯內核的時候產生了什麼。配置時產生了.config文件;編譯的時候產生了.o文件,彙總成了bzImage;還產生一些.ko文件

  make clean:清理.o文件,沒有清除掉.config文件,

  ls  /drivers/net  能夠看到有不少.ko文件

  make distclean  能夠清除掉配置文件也能夠清除掉.o文件

4 嵌入式Linux內核製做

  製做嵌入式平臺使用的Linux內核,方法和製做PC平臺的Linux內核基本一致;

4.1 複製解壓一個Linux內核代碼

4.2 make  distclean 清除之前的配置項

4.3 配置內核make menuconfig  ARCH=arm

4.4 編譯內核make uImage ARCH=arm  CROSS_COMPILE=arm-linux-

 

    若是報錯:將tools中的mkimage文件複製到bin文件夾,而後在從新編譯;

    而後將uImage.bin文件複製到根目錄下的tftpboot文件夾下。而後經過serial com下載到目標板

  編譯完成後生成的uImage文件在/arch/arm/boot/中可看到

5 根文件系統的製做

5.1 創建根文件系統目錄與文件

5.1.1 建立目錄

  先建立一個目錄而後進入

      mkdir rootfs

      cd rootfs

  而後批量的建立開發板須要的如下目錄:

      mkdir bin devetc lib proc sbin sys usr mnt tmp var

      mkdir usr/bin usr/lib usr/sbin lib/modules

5.1.2 建立設備文件(只能在root模式下建立)

      cd  rootfs/dev

    mknod  -m  666  console  c  5  1

      mknod  -m  666  null  c  1  3

5.1.3 加入配置文件

      將etc.tar.gz中的文件解壓後都複製到etc文件中。

5.1.4 添加內核模塊

      cd …/mini2440      /*進入能夠編譯內核的文件夾*/ (即mini240的內核製做的文件夾)

      make modules ARCH=arm CROSS_COMPILE=arm-linux-

      make modules_install ARCH=arm INSTALL_MOD_PATH=…/rootfs

               粉色處爲路徑:home/dongry/rootfs

5.1.5 解壓後進入busybox文件並配置、編譯、安裝busybox:

    make  menuconfig:進入配置界面

      進入Busybox Settings àbuild Options->選中「Build busybox as astatic binary」,靜態連接

   進入Cross Compiler prefix改成(arm-linux-)
    進入Installation Options->選中「Don‘t use /usr」,選中該項能夠避免busybox被安裝到宿主系統的/usr目錄下,破壞宿主系統
    進入Busybox Installation Prefix改路徑(/xxx/rootfs),該選項代表編譯後的busybox的安裝位置

 

  編譯busyboxmake

  安裝busyboxmake install

5.2 掛載根文件系統

  根據存儲設備的硬件特性、系統需求,不一樣的文件系統類型有不一樣的應用場合。在嵌入式Linux應用中,主要的存儲設備爲RAM和FLASH,經常使用的基於存儲設備的文件系統類型包括:jffs2, yaffs2, ubifs, ramdisk等

5.2.1 initramfs方式

  軟鏈接

    ln –s ./bin/busybox  init  /*-s:軟連接; init:軟鏈接名字*/

  進入內核文件

    make menuconfig ARCH=arm

    general setup-><*>Initial RAM filesystem and RAM disk (initramfs/initrd) support

   而後在Initramfs source file(s)處添加rootfs的路徑

 

  配置完成後從新編譯內核:make uImage ARCH=arm CROSS_COMPILE=arm-linux-

  由於文件系統是掛載到內核上的,因此須要從新編譯內核

5.2.2 NFS方式

  此種方式的特色:當文件系統須要從新添加一個文件的時候,initarmfs還得須要從新編譯內核,而NFS方式是直接經過網絡鏈接的會直接反饋到系統上,不須要從新編譯內核。

  內核配置:make menuconfig ARCH=arm

  取消掉上邊方式的配置項,並退出;

  進入file system->networking file systems->保證root file system on nfs被選中,退出保存

  而後進行內核編譯:make uImage ARCH=arm CROSS_COMPILE=arm-linux-

  由於文件系統是掛載到內核上的,因此須要從新編譯內核。

相關文章
相關標籤/搜索