多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > 構建源碼樹----Linux內核剖析(三)

構建源碼樹----Linux內核剖析(三)

來源:程序員人生   發布時間:2015-04-22 07:54:45 閱讀次數:4220次

獲得源碼包的方式


為何要活取源碼包?


在筆者到官網下載源碼時,源碼下面有以下說明:

If you are simply trying to build third-party modules for your kernel, you do not want this package. Install the appropriate linux-headers package instead. 意思是,如果你只是想為內核編譯第3方的模塊,那末,你不需下載此源碼包。安裝內核頭文件包或 許會更合適你。

如果你的ubuntu是保持更新的(比如您常常履行sudo apt-get update和dist-upgrade),
那末您的系統是安裝有內核頭文件包的,不信您到/usr/src目錄下查看,是否是有linux-headers-[版本號]-generic的文件夾呢,呵呵。我現在可以說,你可以在此開發你的驅動程序了。

但是為何我們還要活取源碼呢?
前面已提到如果你只是想為內核編譯第3方的模塊,那末,你不需下載此源碼包。安裝內核頭文件包也許會更合適你。
但是很多時候我們做嵌入式開發或驅動開發,1個基本的Linux裝備驅動開發環境由宿主機目標機組成,宿主機就是用來做驅動開發工作的主機,目標機就是用來運行和測試裝備驅動的主機,在宿 主機上需要有開發工具(gcc,gdb,make等)和linux源碼(版本要對應目標機上的linux內核),而目標機上只要運行linux便可。由于 步驟有所不同,下面分為普通Linux裝備驅動開發嵌入式Linux裝備驅動開發兩種情況來說述環境的搭建和驅動程序的編譯:

普通Linux裝備驅動開發


普通Linux主要是區分于于嵌入式Linux(1般指uClinux),在這類開發中宿主機和目標機可以是1臺主機,
即在本機上開發編譯然后在本機 上加載運行(Linux裝備驅動也能夠直接編譯進內核,但為了開發工作方便,1般采取動態加載的方式),
固然也能夠是兩臺主機
如果是兩臺主機的話,要保證宿主機上的linux源碼的版本號與目標機中的linux內核版本1致。
普通Linux裝備驅動開發的步驟以下:
①在宿主機上安裝開發工具和下載linux源碼(要求版本號和目標機上的linux內核版本1致)。開發工具主要有gcc、gdb、make等,
②編寫Linux驅動程序
是需要修改內核源代碼的。那末這就需要我們在本地主機上安裝1份源碼,在編譯成庫后,在進行驅動開發。
③編寫Makefile文件
④編譯出驅動文件
加載并測試和卸載:加載使用insmod或modprobe命令來實現,使用rmmod命令卸載驅動模塊

嵌入式Linux裝備驅動開發


這類開發中1般目標機為帶有嵌入式處理器的開發板,而宿主機為PC,開發環境需要在宿主機上搭建,嵌入式Linux裝備驅動開發的步驟以下:
①在宿主機上下載嵌入式Linux的源碼,并安裝嵌入式Linux開發工具(針對不同的嵌入式處理器,工具也有所不同,如對應于Arm的arm-gcc系列,針對nios2處理器的nios2-cc系列)
②編寫Linux裝備驅動驅動程序,將該文件復制到(linux 源碼目錄)/drivers/(目標文件夾)/中
③配置和修改內核源碼的信息和makefile文件,在此步配置中可以選擇將我們編寫的驅動編譯進內核還是不選擇編譯,但是不能選擇編譯成模塊
④配置并且編譯內核
⑤將內核燒寫在開發版上進行測試:將生成的zImage文件下載到開發板,開發板上的嵌入式Linux啟動后可以用insmod或modprobe加載驅動模塊,測試終了后可以通過rmmod命令卸載驅動模塊

總結


因此在開發驅動的時候如果你只是想為內核編譯第3方的模塊,那末,你不需下載此源碼包。安裝內核頭文件包也許會更合適我們,但是多數情況下,我們可能時需要修改內核源代碼信息的,這就需要我們在宿主機保護1份與目標機上相同的內核信息,否則我們怎樣保證我們編寫的驅動可以在目標機器上運行呢。。。。

源碼包活取的方法


linux源碼可以通過以下幾種途徑取得:
直接去www.kernel.org下載

通過包管理工具下載源碼,在debian和Ubuntu中可以通過下面這個命令下載,apt-get install linux-source-(版本號) ,下載后的文件在/usr/src目錄中,解壓到該目錄便可

獲得源碼包


注意:
如果您只是為了簡單的學習下驅動的開發,而不期望深層次的探究Linux內核的機制,那末您完全可以跳過此步驟,單使用頭文件您是完全可以進行簡單的第3方驅動開發的。

直接從內核官網上下載


使用發行版自帶的源碼包


Ubunto14.04


安裝編譯內核所需要的軟件build-essential、autoconf、automake、cvs、subversion

sudo apt-get install build-essential kernel-package libncurses5-dev

注意:libncurses5這個軟件包在使用menuconfig配置內核的時候會用到。

ls1下/usr/src首先看下我們的系統中有無源碼包,僅唯一內核頭文件包
這里寫圖片描述

進入/usr/src ,在這里構建源碼樹,我們用下面指令查看可用的源碼包

sudo apt-cache search linux-source

這里寫圖片描述
可以看到得到以下信息

linux-source - Linux kernel source with Ubuntu patches linux-source-3.13.0 - Linux kernel source for version 3.13.0 with Ubuntu patches

那末就讓我們來下載3.13.0版的kernel,通過使用命令下載內核

sudo apt-get install linux-source-3.13.0

下載完成后,會自動的寄存在/usr/src下,

在/usr/src/下ls以下
這里寫圖片描述

解緊縮源碼包

sudo tar jxvf linux-source-3.13.0.tar.bz2

這樣我們就已獲得到了1份完全的源碼包,

CentOS構建源碼樹


構建的之前,最好先

yum update

把內核升級到最新版本。至于具體安裝哪1份源碼樹,要看你用的哪種內核,用uname -a可以看到。

先檢查看看有哪些源碼包

yum list | grep kernel

如果用的普通內核,就

yum install kernel-headers kernel-devel

如果用的PAE內核,就

yum install kernel-headers kernel-PAE-devel

如果用的xen內核,就

yum install kernel-headers kernel-xen-devel

編譯內核


按原來的kernel配置,配置kernel.

sudo make oldconfig

make(相當耗時),開始編譯內核

sudo make

編譯內核鏡像

sudo make bzImage

安裝內核模塊

make modules_install

履行結束以后,會在/lib/modules下生成新的目錄/lib/modules/3.13.0⑷8-generic/, 下面的build文件就是編譯模塊的要用到的文件。至此內核編譯完成。
這里寫圖片描述

卸載無用的內核相干文件

我們為不同的目標機配置不同的內核模塊,這樣1段時間后,我們的系統中會有多分內核信息,再加上我們的系統由于自動升級,系統里也會安裝了很多內核。這樣始終用不到的舊內核或無用內核有必要清算1下,以節省啟動時間和硬盤空間。

這里寫圖片描述
然后通過查看本機上所有內核的列表來決定哪些需要刪除掉:

運行命令:

dpkg --get-selections|grep linux

例如我本機顯示為:
顯示所有內核的列表

注意:
不要刪除當前使用的版本.后面的install表示已安裝,deinstall表示曾安裝過,現在已被刪除(已不占空間).
首先可查看當前用的內核是哪一個,可通過命令:uname -a 來取得信息。

其中帶有image的就是內核文件,因此可看出我的機器上共5個內核鏡像版本。但是其實只安裝了2個鏡像,這個卸載的時候我們就會發現,我當前使用的是3.13.0⑷9,所以決定將其它沒用的內核刪除。
刪除內核鏡像的命令

刪除的命令為:sudo apt-get remove linux-image-XXXX

例如我要卸載3.13.0⑷8的舊內核鏡像,那末運行命令

sudo apt-get purge linux-image-3.13.0-48-generic

sudo apt-get remove linux-image-3.13.0-48-generic

這里寫圖片描述
我們會發現linux-image-extra⑶.13.0⑷8-generic也會隨著被卸載,
這時候候我們ls /lib/modules/3.13.0⑷8-generic/會發現,安裝的內核鏡像文件已沒有了
這里寫圖片描述

卸載內核頭文件

sudo apt-get purge linux-headers-3.13.0-48

sudo apt-get remove linux-headers-3.13.0-48

這里寫圖片描述
這條命令會自動把linux-headers⑶.13.0⑷8-generic刪除,如果未刪除我們一樣可使用命令刪除便可。
最后再次運行命令,查看安裝的內核文件,查看是不是卸載成功

dpkg --get-selections|grep linux

這里寫圖片描述

最后最好刷新1個啟動菜單

sudo update-grub
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 精品尤物 | 伊人蕉久 | 一级一级特黄女人精品毛片 | 欧美尤物视频 | 免费福利网站在线观看 | 性欧美精品videofree高清hd | ww在线观视频免费观看 | 黄色特级片黄色特级片 | 欧美在线视频观看 | 亚洲国产欧美目韩成人综合 | 欧美操人| 国产精品久久久久久免费播放 | 暖暖在线精品日本中文 | 日本aaaa级毛片在线看 | 国产精品视_精品国产免费 国产精品视频1区 | 欧美性xxxx极品hd欧美 | 中文字幕亚洲无线码a | 国产成人久久精品一区二区三区 | 欧美国产成人精品一区二区三区 | 亚洲欧洲日产国码二区在线 | 一区二区三区精品国产欧美 | 久久一区二区三区精品 | 一级做a爱片就在线看 | 国内精品视频 在线播放 | 999毛片免费观看 | 一区二区视频免费观看 | 国产免费高清福利拍拍拍 | 国产乱码精品一区二区三区卡 | 国产成人精品福利网站在线 | free性欧美极度另类3d | 亚洲午夜国产精品无卡 | 永久看片 | 国产欧美一区二区三区免费看 | 国产成人福利美女观看视频 | 在线视频 亚洲 | 国产成人无精品久久久 | 手机看片一区二区 | 波多野结衣视频免费 | 国产 福利 在线 | 亚洲精品高清国产一久久 | 日本大片免费一级 |