Linux 內核學習:環境搭建和內核編譯

2021-02-08 表哥有話講


作者:xiongyuanxiong

連結:www.cnblogs.com/xiongyuanxiong

一、linux內核學習之一:環境搭建--安裝Debian7.3


本系列文章假設讀者已對linux有一定的了解,其實學習linux內核不需要有很深的關於linux的知識,只需要了解以下內容:linux基礎知識及基本shell命令;現代作業系統的基本概念;C語言和gcc基本使用。


在開始我們的linux內核學習之前。首先需要搭建我們的工作學習環境,即安裝linux系統。關於linux系統構建本身的學問已經複雜到可以成為一個獨立的學科了,畢竟這不是我們學習的內容,所以我選擇最簡單的方法:選擇一個linux發行版進行安裝。

 

1、選擇linux發行版

即使使用最簡單的構建工作環境的方法,也耗費了我許多時間。


"選擇"之所以這樣困難,正是因為可供選擇的太多了!


linux發行版有成百上千種,每個發行版都有不同的特點,確實讓人難於取捨。我先後試裝過Gentoo,Arch,debian,fedora。發行版的選擇見仁見智,我不敢說哪個發行版好,哪個不好,每個發行版都有它的擁躉。這裡 建議在選擇時考慮幾個問題:設計哲學,社區支持和包管理器。


實際上,選擇哪種發行版都關係不大,發行版之間的差別基本上都是外圍組件,對linux的內核的修改都不會很多。


況且我們在學習linux內核,或者開發linux驅動時,一般都是以官方內核(即Linus維護的主線內核)為基準.所以我們搭建好環境後幾乎都是要選擇一個版本的官方內核來重新編繹以備用的。


現階段有時間可以多試試不同的發行版,選擇自己最喜歡,用起來最順手的,一旦選擇好了,就不要再改了,一直堅持用它,把它用得滾瓜爛熟.人們會關注你在linux環境中是否得心應手,一般不會關心你懂得用多少種linux發行版。


經過反覆的試用,比較,我最終選擇了Debian,吸引我的是它的崇尚自由的設計哲學;強大的社區支持;數量龐大的軟體包. 相對而言debian還是比較保守的,我用的當前的最新穩定版Debian7.3,在2013年12月發布,它使用的內核還是3.2的(現在官方最新的穩定版內核為3.12.8),不過它配套的工具如GCC,make等,即使用來編繹最新版的內核也已經夠用了。


2 、選擇主機環境

網上很多有經驗的linux專家級人物都建議直接在自己的工作機或家庭機上安裝linux系統,所有日常工作,生活都在linux系統裡完成。


不過對於大多數人來說,這太不現實了了。作為桌面系統,當對於windows而言,linux還是有許多不方便的,即使是最近幾年非常火的ubuntu,號稱可以替換windows的發行版,在日常使用的軟體方面,還是有不小的差距;


再者,我們在工作中常常還是需要開發windows程序,而家裡更不合適了,家裡人基本上都用慣了windows,總不能強迫他們去用不懂的linux系統吧。因此,windows+vmware作為主機環境對於許多人來說,還是第一選擇。


另外還需要一臺真實電腦上安裝linux系統,因為在vmware裡的客戶系統無法訪問主機中一些硬體,如pci設備等,當開發這些設備的驅動時必須在真實機器上調試。


我使用的主機環境有兩個:windows 7+vmware10.0.1環境中安裝debian以及x86-64位機器上的windows 7+debian雙系統。

 

3 安裝準備

安裝準備工作的第一步當然是下載安裝鏡像了。Debian的下載地址:www.debian.org/CD/http-ftp。


因為在公司限制上網,另外也不喜歡老是在線安裝軟體,就直接下載了一個用於amd64平臺的DVD安裝鏡像.有3G多,常用的軟體都有了,需要時直接從DVD裡安裝就行了,一勞永逸。


3.1 vmware
首先使用vmware創建vmware虛擬機,創建時候,"Guest operation system"選擇"Debian 7 64位"這一項。


內核分配512M即可,硬碟20G足夠了。vmware虛擬機可以直接將iso文件作為客戶機的光碟使用,因此安裝起來非常方便。


只需要在虛擬設置中的DVD光碟機的連接選項設置為"使用ISO映象文件",並指定DVD安裝ISO鏡像的路徑即可(後面為了簡潔起見,將這一操作稱為"ISO鏡像加入虛擬機"),接下來開機即可用光碟引導(如果虛擬機磁碟已安裝有系統,則需要在虛擬機的BIOS裡設置光碟啟動,這跟普通電腦設置方法是相同的)。


3.2 x86-64機器

在真實的機器上,使用U盤安裝更加方便。我們將在已裝windwos7的x86-64機器上用U盤安裝,確保你的電腦能用U盤啟動,如果不行只能選擇燒寫ISO到DVD光碟中用光碟安盤了。其次要確保硬碟有足夠的空間,如果沒有的話,可以調整windows使用的磁碟空間大小(如果不懂設置方法,可以自己百度一下),我的硬碟預留了20G的空間。


接下來製作U盤安裝盤,這裡需要用到Universal-USB-Installer工具(我用的是1.9.5.1版本)。步驟如下:

在windows系統下插入U盤;打開Universal-USB-Installer程序;

在step1中選擇"try unlisted linux ISO";

step2中選擇DVD安裝ISO的路徑;step3選擇要安裝的U盤(推薦勾選"Format");

開始寫入U盤,經過幾十分鐘的等待,U盤安裝完畢,可以使用該U盤啟動了。

(用U盤啟動的方法與主板的類型相關,可在網上搜索相關的內容)

 

4 安裝系統

為了使用方便,兩個系統將採用相同的安裝配置,另外我只安裝基本的shell環境和必要的工具軟體。


使用GUI模式雖然美觀,看起來爽,但是對我們這些硬體資源貧乏的窮人來說,運行GUI就是種浪費;其次,與windows不同,linux的X Window完全運行在用戶態,與內核關係不大;再者,在漂亮的桌面環境上放一個終端窗口,總覺得很怪異。


我覺得內核和驅動開發者都應該用shell環境,只在需要進行UI相關的測試或編寫UI程序時才使用GUI環境。


言歸正傳,繼續進行我們的系統安裝吧。經過上面的步驟,不管是vmware還是x86-64機器,debian安裝界面總算是出現了。


選擇"advanced option"-->"expert install"進入專家安裝模式(現在專家那麼多,咱也來冒充一回吧!!)。彈出了一列選項,其實裡面有很多選項都沒必要使用的,大部分都可以在系統安裝完成後進行設置。


選項列表的前面是安裝語言和鍵盤設置,這些可以跳過,就用默認的English就行了,反正在文本模式下也顯示不了中文。首先要執行的是" Load installer components from cd",這一步會加載ISO(或U盤)中的安裝組件,全部選擇默認則可。


加載完後,安裝選項又多了不少。下一步可以"setup user and passwords",在配置選擇中,最好選擇「不使用root帳號」,root帳戶權限太大,現在的linux界普遍認為不用為妙,可以使用sudo工具執行特權操作,創建自己的用戶名和密碼,按提示操作即可。


接著就要配置磁碟分區了,首先要"detect disks",讓安裝程序先檢測磁碟,然後進行"partition disks",怕安裝程序弄壞我的磁碟,我喜歡選擇了"Manual"模式。懶得去設計分區,將剩餘空間全部劃成了一個"/"分區,分區的屬性分別是:"ext4"類型,"primary","bootable"選項。完成分成,忽略關於沒有交換分區的警告,寫入磁碟就完了。


現在可以開始"install the base system"。安裝過程中有個提示,問你要選擇哪個內核,我選了"linux-image-3.2.0-4-amd64",沒去研究供選擇的兩個內核有何不同;接下來又提示initrd的選擇,為了節省空間,選擇了"targeted:only "。


接下來可以"configure the package manager",因為我不想讓系統連網,所以就在"use a network mirror"選擇了"no",另外其他的"service"也全部不選,當然這些選項都可以在系統安裝好以後進行修改。


最後選擇安裝軟體:"select and install software",在軟體列表中,我只選擇了安裝"standard system utilities",其他全部不裝。


到這裡,實質上的系統已經安裝完了,就差引導部分了。有grub和lilo可選,我更喜歡grub,因此選擇:"install the grub boot loader"。debian7.3用的是grub2,功能非常強大。


在安裝過程中grub會自動檢測當前磁碟中安裝的其他的系統,可以放心將grub安裝到MBR中,不必擔心你的windows會無法啟動。安裝完畢,選擇"finish the install",重啟系統吧!

 

5 安裝開發工具

現在我們有了一個基本的debian系統,但是還沒有gcc等開發工具,無法進行日常工作,需要安裝這些工具。


5.1 設置安裝源

debian的包管理器非常完善,我們現在安裝軟體就用debian強大的apt-get命令。但是在使用前要先配置安裝源,以告訴apt-get命令去哪裡找我們的軟體。


安裝軟體儘量都從下載的ISO安裝,既然下載了那麼大的一個ISO鏡像,就別浪費了。debian可以設置幾種安裝源,如CD安裝源,網絡安裝源,本地安裝源。


5.1.1 設置CD安裝源

在vmware中,可以將ISO文件當作光碟使用,實在是太方便了。因此,在vmware中我們設置以CD作為安裝源,實際上在安裝系統時,系統的包管理器就已經把DVD安裝盤加入安裝源了,可以查看/etc/apt/sources.list文件。


如果沒有加入,或者想加入別的CD安裝源也非常簡單,只需執行以下操作:

將ISO加入虛擬機

掛載光碟:sudo mount /dev/cdrom /media/cdrom

將光碟加入安裝源:sudo apt-cdrom add

打開/etc/apt/sources.list查看是否添加成功

更新軟體件表:sudo apt-get update


5.1.2 設置本地安裝源

在真實的x86-64機器上,系統無法把安裝U盤識別為光碟,不能將安裝U盤作為CD安裝源加入。


不過我們可以將ISO文件掛載到某個目錄,再將該目錄作為本地安裝源加入包管理器,步驟如下:

創建本地安裝源目錄:sudo mkdir /mnt/iso_1

掛載ISO文件到該目錄:sudo mount /.../debian-*.iso /mnt/iso_1

添加本地安裝源:打開/etc/apt/sources.list,添加一行,內容為:deb file:///mnt/iso_1 wheezy main

更新軟體列表:sudo apt-get update


5.2 安裝開發工具

5.2.1 安裝VIM,執行命令:sudo apt-get install vim

安裝系統時安裝的是精簡版的VIM:vim.tiny,功能不齊全,因此安裝完整的VIM,喜歡其他代碼編輯工具的網絡可以安裝其他工具。


VIM安裝完後進行配置,在/etc/vim/vimrc文件最後加上以下幾行(不包括括號內容):

set nobackup        (打開時不創建備份文件)

set ts=4                 (設置tab鍵寬度為4個字符寬)

set atuoindent       (啟用自動縮進功能)

set cindent       (啟用C語言縮進功能)

set shiftwidth=4     (縮進寬度為4個字符寬)

syntax on              (打開語法高亮功能)


5.2.2 安裝開發工具包:sudo apt-get install build-essential

build-essential包含了常用的gcc,g++,make等開發工具.


5.2.3 安裝linux-headers:sudo apt-get install linux-headers-3.2.0-4-amd6

需要編繹系統自帶內核相關的模塊時,必須安裝該內核對應的linux-headers,裡面包含內核配置信息,內核頭文件等。


5.2.4 安裝ncurses-dev:sudo apt-get install libncurses5-dev

內核配置腳本依賴於該工具,如果沒有安裝的話,配置內核裡會出錯。


5.2.5 安裝git:sudo apt-get install git

著名的流行的分布式版本管理工具,由Linus開發,官方內核開發用的版本管理工具也是git。Linus的作品,不能不用啊!


git需要先配置用戶名和email:

 

6 環境搭建完成

可以正式開始我們的linux內核學習之旅了。


二、linux內核學習之二:編譯內核


環境搭好後,馬上就進入到下一環節--編譯內核。linux的內核是整個系統最核心的部分,內核的功能基本上決定了系統的能力。


linux的內核代碼使用的是GPL授權,允許自由下載,修改並重新發布內核,只要求發布修改後的內核的同時提供原始碼。


各種各樣的內核版本眾多,幾乎所有的linux發行版都會對內核進行或多或少的修改,debian也不例外。這些內核都有個源頭,即Linus維護的官方內核,其他的內核幾乎都是建立在官方內核的基礎上的。我們的內核學習,也是以官方內核為準。


linux官方內核的網站是:www.kernel.org。從裡面可以了解到內核開發的最新動態,現在就把該網址加入收藏夾吧。

(另外有個網站:www.lwn.net裡面有許多linux大牛發表的觀點,也值得收藏)。


從linux內核3.0開始,內核版本命名採用的策略跟以前不一樣,命名格式為3.A.B,其中A為內核的版本,B為補丁的版本。即3.A.B與3.A.C的內核是相同的版本,具有相同的功能,如果C>B,只是說明3.A.C相比3.A.B修補了一些BUG而已。


進入內核3.0時代後,內核的開發工作發展迅速,版本更新得很快,第一個3.0版本是在2011年7月,而現在,最新的穩定版已是3.12.8,而新的3.13版內核開發工作也已接近尾聲,即將發布穩定版了。("zh.wikipedia.org/wiki/linux"內核"介紹了部分版本的特性)。 


1 選擇內核版本

首先我們需要從www.kernel.org選擇一個版本。實際上從2.6版本開始,內核的架構沒有特別大的變動,基本上是添加新的功能,添加新的驅動的支持,內核接口有一些變動。


另外,除非不得已,不要再使用2.4及更低版本,因為2.6內核的整個架構經過全面重新設計,效率更高,功能更完善,也更安全。


我覺得儘量選擇與發行版使用的內核版本差不多的話會比較好點,內核跟其他組件相對會配合得好些,不知是不是這樣。debian7.3使用的內核是3.2的,而現在該內核版本的最新版為3.2.54,使用相同內核版本的帶有最新補丁的內核重編譯並替換原來的內核,可以最大程度上減少與系統其他部分的兼容性問題,這樣我們可以將主要精力集中在內核的學習上。


下載得到的內核名為linux-3.2.54.tar.xz。


下面將描述在上一課中搭建的「windows7+vmware10.0.1+debian7.3」的系統中編譯內核linux-3.2.54的步驟,在真實機器上安裝的debian7.3系統上編譯的方法也是類似的。


2 安裝vmware-tools

內核文件下載好後,需複製到vmware客戶系統(即debian系統)。


最好的方法是使用vmware提供的文件共享功能,這個功能由vmware-tools軟體包提供,需要先安裝該軟體包。首先設置共享目錄,在VMware菜單欄上點擊"虛擬機"-->"設置",打開設置頁面,點擊"選項"屬性頁,點擊"共享文件夾",在右端選擇"總是啟用",再點擊"添加",按提示設置主機中用於共享的目錄路徑和共享名稱(我用的是workspace)。


啟動debian系統後,點擊菜單欄的"虛擬機"-->"安裝VMWare Tools"。稍等片刻後,虛擬機的CD光碟機動應該已經有了vmware-tools的安裝盤。在debian系統按以下步驟進行:
掛載光碟:sudo mount /dev/cdrom /media/cdrom
複製安裝包: cp /media/cdrom/VM*.tar.gz ./
解壓安裝包:tar -xvf ./VM*.tar.gz
cd ./vmware-tools-distrib
安裝:sudo ./vmware-install.pl(安裝過程中所有選項都使用默認即可)


安裝完成了,檢查發現/mnt目錄下多了一項hgfs目錄,裡面是主機共享目錄,即/mnt/hgfs/workspace。


3 準備新的內核原始碼

將下載的內核原始碼放在上一步中設置的主機共享目錄中,然後解壓到默認的內核原始碼目錄:sudo tar -xvf /mnt/hgfs/workspace/linux-*.tar.gz -C /usr/src

/usr/src目錄下是專門存放內核原始碼的。


放在其他目錄也可以編譯的,不過我們還是遵循通用的規則吧。


我們的debian系統是64位版本(正式名稱是x86_64),為了避免出現問題,我們的內核也將編譯成x86_64版本,故修改下原始碼目錄名稱:sudo mv /usr/src/linux-3.2.54 /usr/src/linux-3.2.54.x86_64.同時把原始碼目錄下的Makefile文件內容也改一下:
sudo vim /usr/src/linux-3.2.54.x86_64/Makefile
搜索字符串"EXTRAVERSION =",在"="後面加上".x86_64"。


這樣,編譯出來的內核鏡像,模塊目錄等都會自動加上".x86_64"後綴。


4 配置內核

配置內核就是告訴編譯器,原始碼中的哪些功能要編譯進內核,哪些編譯成模塊,哪些不需要編譯。源碼中包含了幾千個選擇,因此配置內核是個很複雜很吃力的工作,為了簡化這個工作,內核開發者為各個平臺編寫了默認的簡單配置文件。以x86平臺為例,配置文件放在"arch/x86/configs"目錄下,可將這些配置文件作為配置工作的起點,選擇其中一個文件複製到源碼目錄下,並命令名為".config"(注意前面有個".",它是隱藏文件),這是內核編譯時使用的配置文件,也是內核配置工具啟動時加載的文件,當然內核配置修改後的配置信息也保存在這個文件裡。


由於VMWare的硬體與普通的硬體不同,用內核開發者提供的配置文件編譯出來的內核無法引導系統,我們先暫時忽略有關內核配置的複雜細節,走條捷徑,以debian系統安裝時產生的配置文件作為我們配置內核的起點。


既然debian能引導,用它編譯出來的內核應該不會有什麼大問題,複製debian的配置文件到原始碼目錄,並配置:
sudo cp /boot/config-3.2.0-4-amd64 /usr/src/linux-3.2.54.x86_64/.config
cd /usr/src/linux-3.2.54.x86_64/
sudo make menuconfig

即使不修改內核的配置還是需要執行sudo make menuconfig,因為發行版的內核可能經過修改,使用的.config也可能會有差異,執行一下sudo make menuconfig,它會重新分析.config文件,設置文件中描述的配置信息,退出後再保存成新內核適用的.config文件(退出時,配置工具會詢問你是否保存修改,需要選擇"yes")。


5 編譯,安裝新內核

內核配置完成了,可以編譯內核了,分別執行以下命令,進行編譯並安裝內核:


sudo makesudo make modules_installsudo make install


make命令根據配置信息進行編譯,包括模塊。debian系統默認加入了許多驅動模塊,整個編譯過程比較耗時,估計長達1.5~2個小時,在編譯時可能出現各種問題,需要根據錯誤提示進行修改。


本次編譯模塊時就提示「drivers/staging/rts5139」這個模塊編譯出錯,這是一個USB讀卡器的驅動,不是什麼必需的驅動,直接在內核配置中去掉該模塊吧。


因此,重新執行sudo make menuconfig,找到該模塊:「Device Drivers」-->"Staging drivers"-->"Realtek RTS5139 USB card reader support"。去掉該模塊支持,退出保存,重新執行sudo make。


make modules_install命令用於安裝可裝載模塊,這些模塊會自動安裝到/lib/modules/3.2.54.x86_64下。  

   

make install命令執行三個操作:複製內核鏡像到/boot目錄下;生成initrd-img;更新grub。命令成功執行成功後,新的內核已可以使用,並且列在引導菜單中。


6 重啟系統

重啟系統,grub引導選項中多了我們新編譯的內核選擇,選擇新內核引導。進入系統後執行命令uname -r 查看當前的內核版本,顯示為「3.2.54.x86_64」,確實是我們新編譯的內核。


不過,在VMWare中重編譯內核後,vmware-tools的文件共享功能不起作用了,這是因為vmware-tools中包含了內核模塊,重編譯後,這些模塊不能再正常加載了。


只需執行命令:sudo vmware-config-tools.pl(全部使用默認選項),重新配置vmware-tools即可讓共享功能正常使用。


社群福利:程式設計師技術交流群

這可能是你離頭部大佬最近的一次,為提高群成員質量,表哥特意邀請了華為、騰訊、阿里的朋友進群,方便大家學習交流,一起進步。

有興趣入群的同學,可長按掃描下方二維碼,一定要備註:城市+暱稱+技術方向,根據格式備註,可更快被通過且邀請進群

▲長按掃碼

相關焦點

  • Linux內核編譯初體驗
    下載內核在ftp://ftp.kernel.org/pub/linux/kernel/下載原版內核本文引用地址:http://www.eepw.com.cn/article/201611/319326.htm此處使用linux-2.6.22.6.tar.bz22.
  • Linux 系統內核的調試
    2.3.在VMware中搭建調試環境  kgdb調試環境需要使用兩臺微機分別充當development機和target機,使用VMware後我們只使用一臺計算機就可以順利完成kgdb調試環境的搭建。以windows下的環境為例,創建兩臺虛擬機,一臺作為開發機,一臺作為目標機。
  • 嵌入式linux內核的編譯步驟
    嵌入式linux內核的編譯步驟 華清遠見 發表於 2020-06-19 09:30:24   編譯嵌入式Linux內核都是通過make的不同命令來實現的,它的執行配置文件是
  • linux配置、編譯內核實用工具
    一條完整的規則描述了編譯一個目標的方法和依賴關係,是Makefile中最重要的部分。  ◆Makefile文件 描述如何生成一個或多個目標的文件。它列出目標依賴的各個文件,並提供正確編譯這些目標所需要的規則。  接下來以2.4.23的kbuild為例,簡要介紹一下內核的構建過程。首先,完整的內核構建過程由以下五種Makefile封裝。
  • 在21世紀該怎樣編譯Linux內核
    Linux 操作著無數的計算機和行動電話、工業用途和愛好者使用的板級嵌入式系統(SoC)、RAID 卡、縫紉機等等。回到 20 世紀(甚至是 21 世紀初期),對於 Linux 用戶來說,在剛買到新的硬體後就需要下載最新的內核代碼並編譯安裝才能使用這是不可理喻的。而現在你也很難見到 Linux 用戶為了好玩而編譯內核或通過高度專業化定製的硬體的方式賺錢。
  • Linux 內核的測試和調試(6)
    如果這個補丁用於修復某個 bug,請確保真的已經修復了。如果真的修復了,請確保能通過系統測試。找出打你補丁的模塊下面的回歸測試工具,運行一下。如果補丁涉及到其他架構,你需要交叉編譯然後測試一下。請通過下面的目錄查找測試工具:如果你對你的補丁測試結果感到很滿意,你就可以提交補丁了。請確保提交 commit 的信息要描述得非常清楚。
  • linux內核移植-移植2.6.35.4內核到s3c2440
    本來是想移植最新的內核2.6.39但是總是在編譯快完成的時候報錯,有人說是新的內核對arm平臺的支持不好,所以就降低了一下版本,這裡移植2.6.35.4內核一、準備工作1、下載 解壓內核從官網上下載linux-2.6.35的內核, ftp://ftp.kernel.org/pub/linux/kernel/v2.6/ ,文件不大,約85M。
  • Linux內核啟動-內核解壓縮
    本文引用地址:http://www.eepw.com.cn/article/148792.htm從內核的生成過程來看內核的連結主要有三步:第一步是把內核的原始碼編譯成.o文件,然後連結,這一步,連結的是arch/i386/kernel/head.S,生成的是vmlinux。
  • Linux內核學習:簡單的字符設備驅動
    學習Linux內核最好的入門方式之一是從字符設備驅動開始模仿(來自於《奔跑吧 Linux內核——入門篇》)。對於我們日常生活中存在的大量設備,如攝像頭,USB充電器,藍牙,Wi-Fi等,這些設備在電氣特性和實現原理均不相同,對Linux系統來說如何抽象和描述他們呢?Linux很早就根據設備共同特徵將其劃分為三大類型:1,字符設備;塊設備;網絡設備。
  • linux-3.18內核系統調用
    __NR_syscall_max] = &sys_ni_syscall將數組內容全部初始化為未實現(服務例程沒有實際內容,下邊介紹);然後包含syscalls_64.h的內容逐項初始化,這個文件預先不存在,是在內核編譯期間生成的(請看2.2)。
  • Arm linux內核構建關於.config的問題
    首先下載內核的原始碼。然後tar -xvf 解壓。讓你手動去選擇配置選項)然後使用 make ARCH=arm CROSS_COMPILE=arm-linux-就可以開始編譯了。同樣也可以不用make ARCH=arm CROSS_COMPILE=arm-linux-這麼寫。
  • Linux內核常用的動態調試手段
    linux內核中幾種常用的動態調試手段,也都是我常用的,都是在生產環境中直接使用,不需要藉助工具,依照我的經驗,去客戶生產環境中解決問題,很多都不會預裝perf、BPF工具,有的即使有perf這樣的工具,也因為工具性能影響客戶幾千億美金的正常業務,也會不讓你使用。
  • linux內核啟動流程
    畢竟Linux內核是由很多人,花費了巨大的時間和精力寫出來的。而且直到現在,這個世界上仍然有成千上萬的程式設計師在不斷完善Linux內核的代碼。   Linux內核啟動及文件系統加載過程   當u-boot開始執行bootcmd命令,就進入Linux內核啟動階段,與u-boot類似,普通Linux內核的啟動過程也可以分為兩個階段,但針對壓縮了的內核如uImage就要包括內核自解壓過程了。本文以linux-2.6.37版源碼為例分三個階段來描述內核啟動全過程。
  • 淺談內核的Makefile、Kconfig和.config文件
    本文轉載自【微信公眾號:strongerHuang,ID:strongerHuang】經微信公眾號授權轉載,如需轉載與原文作者聯繫Linux內核源碼文件繁多,搞不清Makefile、Kconfig、.config間的關係,不了解內核編譯體系,編譯修改內核有問題無從下手,自己寫的驅動不知道怎麼編進內核,不知道怎麼配置內核,這些問題都和Makefile、Kconfig
  • 什麼Linux,Linux內核及Linux作業系統
    但是它有不能稱為一個真正的或者說可用於生產的作業系統,因為它只實現了對計算機資源的簡單管理(也就是實現了一個作業系統內核),卻沒有編譯工具等其它作業系統必備的工具集成到其中。Linux作業系統及各種發行版前面我們簡要的介紹了Linux作業系統、內核和發行版。對於Linux作業系統來說,其本身是一個整體,包括Linux內核、系統庫和系統程序,Linux內核是其最基礎的部分,它實現了對硬體資源的管理,並且提供了使用這些硬體資源的通用接口。
  • 「正點原子Linux連載」第三十七章Linux內核移植
    第三十七章Linux內核移植前兩章我們簡單了解了一下Linux內核頂層Makefile和Linux內核的啟動流程,本章我們就來學習一下如何將NXP官方提供的Linux內核移植到正點原子的I.MX6U-ALPHA開發板上。通過本章的學習,我們將掌握如何將半導體廠商提供的Linux BSP包移植到我們自己的平臺上。
  • 深入理解Linux內核鍊表
    在Linux內核中使用了大量的鍊表結構來組織數據,包括設備列表以及各種功能模塊中的數據組織。這些鍊表大多採用在[include/linux/list.h]實現的一個相當精彩的鍊表數據結構。本文的後繼部分就將通過示例詳細介紹這一數據結構的組織和使用。
  • 嵌入式Linux內核啟動主要分為這三個階段
    一、Linux內核自解壓過程  在linux內核啟動過程中一般能看到圖1內核自解壓界面,這裡重點討論內核的自解壓過程。  內核壓縮和解壓縮代碼都在目錄kernel/arch/arm/boot/compressed,編譯完成後將產生head.o、misc.o、piggy.gzip.o、vmlinux、decompress.o這幾個文件,head.o是內核的頭部文件,負責初始設置;misc.o將主要負責內核的解壓工作,它在head.o之後;piggy.gzip.o是一個中間文件,其實是一個壓縮的內核(kernel
  • Linux內核概述
    μC/OS-II 能管理 64 個任務,並提供任務調度與管理、內存管理、任務間同步與通信、時間管理和中斷服務等功能,具有執行效率高、佔用空間小、實時性能優良和可擴展性強等特點。μClinuxμClinux 是一種優秀的嵌入式 Linux 版本,其全稱為 micro-control Linux,從字面意思看是指微控制 Linux。
  • 改善Linux內核實時性方法的研究與實現
    上半部分立即執行,下半部分將喚醒相應的和中斷處理相關的進程稍後執行。雖然這種機制使得中斷處理變得更加高效和易於維護,但是對於系統如果有嚴重的網絡負載或其他I/O負載時,中斷將非常頻繁,內核當前的實時任務會被不停中斷,這對於Linux的實時應用來說是不可接受的。  另外,Linux為了使內核同步而採用了關中斷,在內核的關中斷區域,中斷是被屏蔽的。