系統移植總結

menu 簡述嵌入式linux系統移植的主要內容有哪些?linux

1> 搭建交叉開發環境面試

  2> 移植bootloader編程

  3> 移植linux內核服務器

  4> 製做根文件系統網絡

1、搭建交叉開發環境架構

 

一、交叉編譯工具鏈的製做(GCC交叉編譯器的生成)函數

(1)       下載Binutils、GCC、Glibc源碼工具

(2)       配置並編譯Binutils取得所需的彙編和連接程序(鏈接程序ld,彙編程序as,主要爲GNU系統提供彙編和鏈接工具)測試

(3)       配置並編譯GCC源碼生成GCC編譯器。(主要爲GNU系統提供C編譯器)spa

(4)       配置Glibc並編譯生成Glibc的c函數庫(一些基本的C函數和其餘函數定義)

(5)       再次配置和編譯GCC源碼,生成其餘語言的編譯器,如C++編譯器(通常是C編譯器首先生成,而後以這個爲基礎,結合生成的Glibc的C函數庫,再編譯生成其餘編譯器)

【注】工具鏈依賴內核版本

 

二、二進制工具Binutils

ld:

as:

objcopy:objcopy   是用來進行目標格式轉換的  

objdump:objdump   是用來反彙編的

strings:

strip:strip  是丟棄目標文件的所有或者特定符號,減小文件體積的  

addr2line: addr2line 是用來把程序地址轉換爲文件名和行號的 

ar:ar 是用來將目標文件生成靜態庫的

三、配置主機方必須的軟件

(1)tftp服務器

Tftp用來下載遠程文件的最簡單網絡協議,基於UDP協議實現

(2)nfs服務器

     主要將本地的一個目錄經過網絡輸出,其餘計算機能夠遠程掛接這個目錄並進行訪問。

       Nfs有本身的協議和端口,但在文件傳輸或其餘相關信息傳遞的時候,NFS使用遠程過程調用協議(RPC),RPC負責管理端口號的對應與服務相關的工做。NFS自己沒有傳輸文件的協議。

 

2、 U BOOT

2010.08版本以前的Uboot架構比較簡單,以後的版本架構變複雜。

1. 什麼是bootloader,其做用是什麼? 列舉三種ARM平臺經常使用的bootloader

(1)bootloader是系統加電或復位時首先運行的一段代碼,

(2)做用:對系統的軟硬件作相應的初始化,爲操做系統的加載運行作好準備。

(3)ARM平臺經常使用的bootloader:u-boot、  redboot、  blob 、 vivi

 2.描述u-boot啓動流程

 u-boot啓動分爲兩個階段:

第一個階段用匯編實現。設置中斷向量表->設置SVC模式、中斷和時鐘 ->

關閉看門狗、mmu和cache->初始化內存控制器->自搬移->設置堆棧、清空bss段

第二個階段用C實現。調用一系列初始化函數->初始化Flash設備和環境變量->

初始化網絡設備->進入循環

三、Uboot移植
(1)uboot移植中比較重要的幾個目錄。
   【90%的移植都在下面的6個目錄】
  a .平臺相關的(重要,關係到系統能不能正常啓動,能不能用)
/board     /cpu    /lib_arm    /include 
  b.  平臺無關的(次重要,功能是否齊全,關係到uboot支持的命令。。。如:ping命令的支持)通用
      /common  /drivers    /include 
 (2)Uboot移植流程
  a.修改Makefile
    增長交叉編譯工具鏈的路徑:CROSS_COMPFILE:=
  b.make clean(清除以前的編譯)
  c.配置Uboot(私有化,針對要移植的開發板作相應修改)
  d.編譯Uboot
     make完生成一些文件(主要關注三個)
    Uboot(elf文件)、Uboot.bin(二進制文件)、System.map(符號映射表)
   
4.Uboot相關知識點:

(1).  bootloader向內核傳參的方式有param_struct、 tag;

(2)  u-boot的命令中,設置環境變量的命令是  setenv

(3) u-boot中存放內核啓動參數的環境變量是 bootargs

 

(4)linux要求bootloader在運行內核前,讓系統進入 SVC 模式 

 (5)linux要求bootloader將平臺號保存在 r1

5.uboot

uboot倒計時,由自啓動腳本決定

bootargs:選擇啓動方式

交叉調試:gdb_server(交叉編譯工具鏈裏有)

CP到nfs掛載的路徑下,

 

 

3、linux內核移植

一、內核概念

二、功能(linux內核的五大任務)

進程管理、內存管理、文件系統支持、設備管理(驅動)、網絡協議

三、組織結構

四、配置內核(內核裁剪:make menuconfig)

       (1)頂層Makefile

(2)kconfig(裁剪 菜單選項的來源,添加刪除選項)

(3)arch/arm…/mach/…板級信息

(4)arch…/smdkc100.c 板級驅動配置信息

五、編譯內核(make zImage)

六、添加驅動

  (1)網卡

(2)LED

(3)Nand分區

(4)SD卡

(5)LCD

七、可能考的面試題

  配置內核時,保留了什麼,裁剪了什麼?

項目中前期開發模式是nfs掛載的方式,全部配置了nfs服務,配置了DM9000的驅動,便於tftp下載;項目中主控端用到了zigbee模塊,GPRS模塊,因此分別配置了USB轉串口驅動。項目中沒有用到SPI驅動,因此把這部分裁剪了。

【注】make zImage:編譯生成內核的可移植鏡像

      make modules:以M形式控制的部分才能編譯

 8.linux內核啓動流程

(1)Bootloader:

a.硬件上電後跳到一個固定位置執行相應的代碼

b.初始化相應的設備

c.加載內核的代碼到內存

d.跳到內核代碼起始位置執行

(2)Kernel

a.內核自解壓

b.初始化靜態編譯進內核的驅動模塊(須要訪問rootfs)

c.掛載rootfs(須要訪問、運行用戶空間的程序)

d.直接執行第一個用戶空間程序

(3)第一個用戶空間程序

   配置用戶環境,執行服務進程

9.linux調試內核方法介紹

當console初始化之後,通常最爲簡單的內核調試方式爲 printk 

     printk支持幾種打印級別?

8種(0~7)

10 .linux相關知識點
(1)內核啓動過程當中,若是終端出現」Error:a」錯誤,可能出現的緣由是:內核不支持當前開發平臺
(2)內核啓動過程當中,若是終端出現」Error:p」錯誤,可能出現的緣由是:內核不支持當前處理器
(3)內核解壓後,console初始化之前使用的函數是:printascii

十一、內核相關問題: 

  (1)編譯內核鏡像命令 make  zImage 

       編譯模塊的命令 make  modules

  (2)第一次配置內核時,應使用的缺省內核配置文件是什麼? 

    arch/arm/configs/s5pc100_defconfig

  (3)存放平臺代碼的文件是什麼(完整路徑)? 

    arch/arm/mach-s5pc100/mach-smdkc100.c

  (4)內核解壓後的入口在哪一個文件? 

    arch/arm/kernel/start.S

 4、rootfs的製做 

1.概念  

      存放運行、維護系統所必須的各類工具軟件、庫文件、腳本、配置文件和其餘特殊文件的地方,也能夠安裝各類軟件包。  

 2.rootfs製做流程

(1)採用bubybox建立基本命令

(2)建立基本的目錄/lib  /etc /var  /tmp /dev  /sys /proc等

(3)添加glibc基本動態庫

(4)建立基本的設備節點

(5)添加啓動配置和腳本程序(通常etc下有此四個文件)/etc/inittab   /etc/fstab  /etc/init.d/rcS

另外有一個文件profile也能夠加,用來存放環境變量。

【inittab:定義了各類action。

如:在用busybox製做根文件系統時,若是要求在程序執行前按enter鍵進行確認,添加action:askfirst 】

【rcS:init進程調用的第一個腳本

  通常都會有 mount -a(掛載全部fstab下的內容)】

(6)測試根文件系統

(7)製做根文件系統鏡像,如ramdisk  cramfs jffs2......

 四、根文件系統特性 

(1)內核掛載的第一個文件系統, 

(2)根文件系統上存放有內核運行的第一個初始化程序init、命令、設備節點、配置文件以及共享庫等等 

(3)系統中只能有一個根文件系統 

(4)嵌入式linux系統一般用bubybox工具集構建文件系統,以減少系統體積

 5.init進程  

 (1)全部進程的祖宗進程 

 (2)全部孤兒進程的父進程 

六、不一樣的文件系統的區別 

(1)yaffs二、jffs2 文件系統能夠運行在nand flash上,並具備可讀寫特性 

(2)cramfs  文件系統能夠運行在nand flash上,並具只讀特性  

(3)tmpfs 不佔用任何磁盤空間的文件系統 

ubifs針對大容量磁盤的文件系統。

yaffs,yaffs2的區別:yaffs按小頁訪問,yaffs2按大頁訪問。

yaffs文件系統有一個致命的bug,在開機時會掃描整個磁盤,速度慢,耗時。因此適用於小容量的磁盤(兆級如下的)。

相關文章
相關標籤/搜索