首頁>Club>
7
回覆列表
  • 1 # linux技術棧

    如何學習核心及程式設計,我覺得可以從核心的引導啟動開始:

    1.不防從載入程式(bootloader)開始,可以選擇u-boot,熟悉u-boot啟動程式碼,比如初始化記憶體、啟動的彙編程式碼是如何跳轉至C程式的、bootloader引導Linux有哪些要求(基於CPU架構不同而不同,比如ARM引導Linux可參考《Booting ARM Linux》http://www.simtec.co.uk/products/SWLINUX/files/booting_article.html)、啟動後是如何傳遞引數給Linux核心的、;

    2.bootloader將核心映像載入物理記憶體後,壓縮的核心映像是如何自解壓、head.S檔案中對MMU操作、單/多核是如何跑起來的、start_kernel;btw.核心引導啟動這個過程建議結合一些作業系統的理論知識一起熟悉,比如MMU頁表的建立,若不熟悉對應CPU架構下的MMU,即使懂彙編但程式碼看起來可能比較吃力。

    熟悉核心的引導過程,個人覺得將大學時學的作業系統理論知識與實踐相結合起來了,好多上學時模糊的概念一下清晰了許多。

    接下來再來說下核心程式設計:

    1.make menuconfig等配置核心,構建及更新核心;

    2.熟悉核心Makefile檔案;

    3.從Hello World開始學習模組程式設計,熟悉file_operations嘗試程式設計簡單的驅動;

    4.掌握(熟悉使用、區別)核心提供競爭方面的API,spinlock/semaphore/rw_semaphore/completion/rw_lock/mutex,以及RCU等;

    5.核心態下動態記憶體API,get_free_pages/kmalloc/vmalloc等(關於記憶體管理這塊可暫時先了解介面的使用,後續有精力再去熟悉Linux記憶體管理,裡面太多東西太複雜了,呵呵,我也是略知皮毛);

    6.核心執行緒的建立,核心與使用者程序的通訊方式;

    7.網路方面可以先從Socket的實現慢慢熟悉,比如recv系統呼叫是如何經過傳輸層、網路層把鏈路層的資料包一層一層傳回應用程式的;

    8.網路驅動的編寫等;

    這裡給大家推薦一個學習linux核心的地址https://ke.qq.com/course/431590?flowToken=1013767

    Linux伺服器開發的免費學習地址:https://ke.qq.com/course/417774?flowToken=1013300

  • 中秋節和大豐收的關聯?
  • 虎斑貓尿不出來怎麼根治?