內核分析筆記

1、linux 內核基本概念-上
     linux 內核 和 linux 操作系統的區別
     linux 內核 : 通常指的是由官網下載下來的源碼 編譯出來的 uImage 或者 zImage 鏡像
                    啓動中包含的由 硬件抽象層、文件系統、進程調度、網絡管理、驅動管理、內存管理(多任務)等功能。
     通常我們使用的 linux 系統 是指: 像 Ubuntu 等操作系統。 包含linux 內核, 工具集,各種第三方庫,
                    圖形界面,應用程序的一個發佈包(發行版)
     
     linux 內核特性
            免費開源
            可移植性 支持廣泛的硬件平臺
                arm ppc mips x86...
            擴展性
                軟硬件可裁剪
            高可靠性、穩定性
            網絡功能強大
            多任務、多用戶系統
            模塊化設計
     linux 內核版本
        採用 A.B.C.D 
            A 主版本號 
            B 次版本號 爲偶數表示 穩定版本 奇數爲開發中版本
            C 表示linux的發行版本號
            D 表示更新版本號

    linux 內核包含的五大功能:
        1. 進程管理
        2. 內存管理
        3. 文件系統
        4. 網絡協議
        5. 設備驅動管理
        linux 不會是一個真正的實時系統 (時間片輪轉方式)
        vxwork 是一個真正的實時(RTOS )系統 收費
        
    linux 分層
        
         應用程序
            ||
            \/
         系統調用
            ||
            \/
         linux 內核  分爲 平臺無關碼 和 平臺相關碼
            ||
            \/
         硬件平臺
        
    linux 內核 下載地址  https://www.kernel.org/
    linux 各個版本下載地址 https://www.kernel.org/pub/linux/kernel/
        編譯內核 make uImage 
        編譯設備樹 make dtbs
        上面兩個命令都需要在 源碼的頂層目錄上 使用  ☆☆☆

二、linux 內核基本概念-中
    注意要把 linux源碼 拷貝到 Ubuntu中 解壓, 
    因爲 源碼中會有一些軟件鏈文件, 這些文件,windows文件系統 不能識別
    
    解壓命令 tar -xvf ***.tar.xz
    
//    arm-cortex_a8_linux-gnueabi-..
//    這個交叉編譯工具鏈,我沒有從錄製課程的老師手裏拿到
//    大家也不必使用這個工具鏈,直接使用 課程資料裏提供的 
//    gcc-4.6.4.tar.xz 就可以了
    
    配置交叉編譯工具鏈:
        1.export PATH=/自己的路徑/gcc-4.6.4/bin:$PATH
        2. 寫到啓動腳本中 /etc/profile  或者 .bashrc
    
    修改 源碼頂層目錄的 Makfile
    ARCH ?= arm
    CROSS_COMPILE ?= arm-none-linux-gnueabi-
//    我們不用 arm-cortex_a8_linux-gnueabi- 這個。。
    
    
三、linux 內核基本概念-下
    使用 gcc-4.6.4 編譯內核
    使用 putty 串口工具軟件
    
//    提醒: 如果想啓動內核,還需要配置一下網絡 
//         網絡配置學習視頻 
// 系統移植之網絡配置             11.3    羣內    http://e.vhall.com/102020226
    設備樹: 用於描述硬件設備信息。
    低版本內核的設備硬件備信息,是存放在linux源碼中的
    高版本是寫到 設備樹文件中
    
☆    arch  不同CPU體系結構的差異代碼
        -> arm  不同板子板子的源碼 
            -> boot  uImage zImage 
                -> dts 設備樹
☆    driver 驅動目錄
        -> net 網絡驅動 (與設備相關)
    kernel 內核調度算法
    net    網絡協議  (與設備無關的)
    block 塊設備相關驅動
    fs  文件系統
    include 頭文件存放目錄
    Documentation 幫助文檔
    tools 工具
    scripts 編譯內核時使用的腳本
    ipc 進程間通信
    mm 內存管理
        
    理解平臺相關代碼和平臺無關代碼
    
四、linux 內核啓動分析
    啓動 u-boot -> kernel -> rootfs(root filesystem)
    啓動腳本 /etc/init.d/rcS  自啓動應用
    Starting kernel ... 屬於 uboot的打印
    
    重點理解 uboot 啓動流程(面試出現頻率高)
    內核啓動流程
    
    a. 自解壓 decompess (arch/arm/boot/compressed/head.S) 彙編
    b. 檢測合法性 入口 stext (arch/arm/kernel/head.S)
        (CPU 類型 機器類型)
    c.  運行 C代碼 start_kernel (init/main.c)
    d. 掛在 rootfs
    e. 運行第一個應用程序 linuxrc
    
五、linux 內核調試方法
    1. 彙編階段 點燈法
    2. puts(內核解壓前)
    3. printascii (console 初始化前)
    4. printk (內核解壓後,信息輸出顯示到console初始化之後)
        打印級別  /proc/sys/kernel/printk
            8個打印級別
    init/main.c - start_kernel 
    第一次編譯內核代碼會比較長時間
    如果修改或者添加源文件,再次編譯,只會編譯變化的部分 會快一些
    
    oop內核異常信息
    
    pc : 程序計數器
    arm-none-linux-gnueabi-addr2line pc地址 -e vmlinux -f
    在源碼中顯示具體出錯的位置

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章