1. linux 下用戶程序如何引用內核頭文件
#include "linux/config.h"
#include "linux/kernel.h"
#include "linux/mole.h"
#include "linux/interrupt.h"
錯了
正確的是和C一樣的
如#include <linux/config>
2. 如何在Linux上安裝內核頭文件
什麼系統?CentOS、Fedora、RHEL等直接用yum
install
kernel-headers。
Ubuntu嘗試用apt-get
install。
不過,建議安裝前,先查看一下當前使用的內核版本。
linux下可能會有2個內核共存。例如2.6.18和2.6.33共存。每次啟動時,都會選定一個內核版本。那麼。安裝kernel-headers時,選擇的版本應當與當前使用的內核版本一致。
就是2.6.18的內核配2.6.18的kenrl-headers。
因為以前曾經有人遇到過不匹配的狀況,導致某些程序功能無法安裝使用。
例如2.6.33的kernel已經發布安裝但2.6.33的kernel-headers還沒有發布。
結果以2.6.33內核登錄系統後,安裝kernel-headers時就出錯了。
可以使用uname
-r來查看當前內核版本。
使用yum
list
|
grep
kernel-headers來查看當前yum倉庫中的kernel-headers的版本是否和內核版本一致。
如果一致,直接yum
install
kernel-headers
如果不同,重啟系統,換其他內核版本登錄後,再yum
install。
Ubuntu參考執行
3. 安裝wifi網卡驅動,提示要Linux內核頭文件怎麼辦
那種發行版?
ubuntu:
1、首派世先,使用dpkg-query命令檢查是否有可用的內核頭文件。
$ dpkg-query -s linux-headers-$(uname -r)
2、接著使用下面的命令安裝匹配的內核頭文件。
$ sudo apt-get install linux-headers-$(uname -r)
fedora,centos等
1、首先,使用rpm -qa命令檢查是否有可用的內核頭文件。
$ rpm -qa | grep kernel-headers
2、接著使用下面的命令安裝匹配的內核頭燃羨塵皮禪文件。
$ sudo yuminstall kernel-headers
4. 如何解決Linux內核頭文件和內核版本不同的問題
當然需要。。。 第一點,就是源碼樹中有相應的頭文件和函數的實現,沒有源碼樹,你哪調用去呢?(PC上編譯的時候內核有導出符號,系統中有頭文件,這樣就可以引用內核給你的介面了,但是只能編譯你PC上版本的內核可載入的模塊)。 第二個,內核模塊中會記錄版本號的部分,需要記錄版本號的原因是不同脊大的內核版本之間,那些介面和調用可能會有比較大的差異,因此必須要保證你的代碼和某個特定的內核對應,這樣編譯出來的模塊就可以(也是只能)在運行這個內核版本的Linux系櫻拆豎統中載入,否則一個很簡單的異常就會導致內核崩潰,或者你的代碼根本無法編御數譯通過(介面名變了)。 我上面說的是編譯模塊的情況,當然如果是把模塊直接編譯到內核當中去的話,那就不用說了,沒有內核源碼,你無法編譯內核。
5. 如何解決Linux內核頭文件和內核版本不同的問題
我在Arch Linux上安裝VirtualBox的增強包的時候也遇到過這種情況,因為沒有安裝增強包所需要喚御的linux-headers,headers和kernel版本不匹配就直接去安裝一個匹配的headers就好。
我在虛擬機上重現了一下題主的現狀,搜索了一下軟體包發現並沒有kali3的headers。
於是也裝了一個kali4的headers。
結果當然是不行,於是就自己去下載一個deb包安裝就好。
這樣就好了,我在自己的虛擬機上測試是沒有問題的,希望能夠幫到你。
關於Linux命令的介紹,看看《和碼岩linux就該這么學》,具體關模型於這一章地址3w(dot)linuxprobe/chapter-02(dot)html
6. 如何給linux安裝新內核
一、獲取內核源碼
二、解壓內核源碼
首先以root帳號登錄,然後進入/usr/src子目錄。如果用戶在安裝Linux時,安裝了內核的源代碼,則會發現一個linux-x.y.z的子目錄。該目錄下存放著內核x.y.z的源代碼。此外,還會發現一個指向該目錄的鏈接linux。刪除該連接,然後將新內核的源文件拷貝到/usr/src目錄中,並解壓:
#tarzxvfLinux-2.3.14.tar.gz
文件釋放成功後,在/usr/src目錄下會生成一個linux子目錄。其中包含了內核2.3.14的全部源代碼。將/usr/include/asm、/usr/inlude/linux、/usr/include/scsi鏈接到/usr/src/linux/include目錄下的對應目錄中。
#cd/usr/include
#rm-Rfasmlinux
#ln-s/usr/src/linux/include/asm-i386asm
#ln-s/usr/src/linux/include/linuxlinux
#ln-s/usr/src/linux/include/scsiscsi
刪除源代碼目錄中殘留的.o文件和其它從屬文件。
#cd/usr/src/linux
#makemrproper
三.增量補丁
有時不需要完全重新安裝,只需打增量補丁,類似升級,在內核源碼樹根目錄運行:
patch-p1<../patch-x.y.z
四.內核源碼樹目錄:
arch:包含和硬體體系結構相關的代碼,每種平台佔一個相應基啟的目錄。和32位PC相關的代碼存放在i386目錄下,其中比較重要的包括kernel(內核核心部分)、mm(內存管理)、math-emu(浮點單元模擬)、lib(硬體相關工具函數)、boot(引導程序)、pci(PCI匯流排)和power(CPU相關狀態)。
block:部分塊設備驅動程序。
crypto:常用加密和散列演算法(如AES、SHA等),還有一些壓縮和CRC校驗演算法。
Documentation:關於內核各部分的通用解釋和注釋。
drivers:設備驅動程序,每個不同的驅動占亂明用一個子目錄。
fs:各種支持的文件系統,如ext、fat、ntfs等。
include:頭文件。其中,和系統相關的頭文件被放置在linux子目錄下。
init:內核初始化代碼(注意不是系統引導代碼)。
ipc:進程間通信的代碼。
kernel:內核的最核心部分,包括進程調度、定時器等,和平台相關的一部分代碼放在arch/*/kernel目錄下。
lib:庫文件代碼。
mm:內存管理代碼,和平台相關的一部分代碼放在arch/*/mm目錄下。
net:網路相關代碼,實現了各種常見的網路協議。
scripts:用於配置內核文件的腳本文件。
security:主要是一個SELinux的模塊。
sound:常用音頻設備的驅動程序等。
usr:實現了一個cpio。
在i386體系下,系統引導將從arch/i386/kernel/head.s開始執行,並進而轉移到init/main.c中的main()函數初始化內核。
五.配置內核
#cd/usr/src/linux
內核配置方法有三種:
(1)命令行:makeconfig
(2)菜單模式的配置界面:makemenuconfig
(3)Xwindow:makexconfig
Linux的內核配置程序提供了一系列配置選項。對於每一個配置選項,用戶可以回答"y"、"m"或"n"。其中"y"表示將相應特性的支持或設備驅動程序編譯進內核;"m"表示將相應特性的支持或設備驅動程序編譯成可載入模塊,在需要時,可由系統或用戶自行加入到內核中去;"n"表示內核不提供相應特性或驅動程序的支持。由於內核的配置選項非常多,本文只介紹一些比較重要的選項。
1、Codematurityleveloptions(代碼成熟度選項)
Promptfordevelopmentand/orincompletecode/drivers(CONFIG_EXPERIMENTAL)[N/y/?]如果用戶想要使用還處於測試階段的代碼或驅搏陪如動,可以選擇「y」。如果想編譯出一個穩定的內核,則要選擇「n」。
2、Processortypeandfeatures(處理器類型和特色)
(1)、Processorfamily(386,486/Cx486,586/K5/5x86/6x86,Pentium/K6/TSC,PPro/6x86MX)[PPro/6x86MX]選擇處理器類型,預設為Ppro/6x86MX。
(2)、MaximumPhysicalMemory(1GB,2GB)[1GB]內核支持的最大內存數,預設為1G。
(3)、Mathemulation(CONFIG_MATH_EMULATION)[N/y/?]協處理器模擬,預設為不模擬。
(4)、MTRR(MemoryTypeRangeRegister)support(CONFIG_MTRR)[N/y/?]
選擇該選項,系統將生成/proc/mtrr文件對MTRR進行管理,供Xserver使用。
(5)、Symmetricmulti-processingsupport(CONFIG_SMP)[Y/n/?]選擇「y」,內核將支持對稱多處理器。
3、Loadablemolesupport(可載入模塊支持)
(1)、Enableloadablemolesupport(CONFIG_MODULES)[Y/n/?]選擇「y」,內核將支持載入模塊。
(2)、Kernelmoleloader(CONFIG_KMOD)[N/y/?]選擇「y」,內核將自動載入那些可載入模塊,否則需要用戶手工載入。
4、Generalsetup(一般設置)
(1)、Networkingsupport(CONFIG_NET)[Y/n/?]該選項設置是否在內核中提供網路支持。
(2)、PCIsupport(CONFIG_PCI)[Y/n/?]該選項設置是否在內核中提供PCI支持。
(3)、PCIaccessmode(BIOS,Direct,Any)[Any]該選項設置Linux探測PCI設備的方式。選擇「BIOS」,Linux將使用BIOS;選擇「Direct」,Linux將不通過BIOS;選擇「Any」,Linux將直接探測PCI設備,如果失敗,再使用BIOS。
(4)Parallelportsupport(CONFIG_PARPORT)[N/y/m/?]選擇「y」,內核將支持平行口。
5、PlugandPlayconfiguration(即插即用設備支持)
(1)、PlugandPlaysupport(CONFIG_PNP)[Y/m/n/?]選擇「y」,內核將自動配置即插即用設備。
(2)、ISAPlugandPlaysupport(CONFIG_ISAPNP)[Y/m/n/?]選擇「y」,內核將自動配置基於ISA匯流排的即插即用設備。
6、Blockdevices(塊設備)
(1)、NormalPCfloppydisksupport(CONFIG_BLK_DEV_FD)[Y/m/n/?]選擇「y」,內核將提供對軟盤的支持。
(2)、EnhancedIDE/MFM/RLLdisk/cdrom/tape/floppysupport(CONFIG_BLK_DEV_IDE)[Y/m/n/?]選擇「y」,內核將提供對增強IDE硬碟、CDROM和磁帶機的支持。
7、Networkingoptions(網路選項)
(1)、Packetsocket(CONFIG_PACKET)[Y/m/n/?]選擇「y」,一些應用程序將使用Packet協議直接同網路設備通訊,而不通過內核中的其它中介協議。
(2)、Networkfirewalls(CONFIG_FIREWALL)[N/y/?]選擇「y」,內核將支持防火牆。
(3)、TCP/IPnetworking(CONFIG_INET)[Y/n/?]選擇「y」,內核將支持TCP/IP協議。
(4)TheIPXprotocol(CONFIG_IPX)[N/y/m/?]選擇「y」,內核將支持IPX協議。
(5)、AppletalkDDP(CONFIG_ATALK)[N/y/m/?]選擇「y」,內核將支持AppletalkDDP協議。
8、SCSIsupport(SCSI支持)
如果用戶要使用SCSI設備,可配置相應選項。
9、Networkdevicesupport(網路設備支持)
Networkdevicesupport(CONFIG_NETDEVICES)[Y/n/?]選擇「y」,內核將提供對網路驅動程序的支持。
10、Ethernet(10or100Mbit)(10M或100M乙太網)
在該項設置中,系統提供了許多網卡驅動程序,用戶只要選擇自己的網卡驅動就可以了。此外,用戶還可以根據需要,在內核中加入對FDDI、PPP、SLIP和無線LAN(WirelessLAN)的支持。
11、Characterdevices(字元設備)
(1)、Virtualterminal(CONFIG_VT)[Y/n/?]選擇「y」,內核將支持虛擬終端。
(2)、(CONFIG_VT_CONSOLE)[Y/n/?]
選擇「y」,內核可將一個虛擬終端用作系統控制台。
(3)、Standard/generic(mb)serialsupport(CONFIG_SERIAL)[Y/m/n/?]
選擇「y」,內核將支持串列口。
(4)、Supportforconsoleonserialport(CONFIG_SERIAL_CONSOLE)[N/y/?]
選擇「y」,內核可將一個串列口用作系統控制台。
12、Mice(滑鼠)
PS/2mouse(aka"auxiliarydevice")support(CONFIG_PSMOUSE)[Y/n/?]如果用戶使用的是PS/2滑鼠,則該選項應該選擇「y」。
13、Filesystems(文件系統)
(1)、Quotasupport(CONFIG_QUOTA)[N/y/?]選擇「y」,內核將支持磁碟限額。
(2)、Kernelautomountersupport(CONFIG_AUTOFS_FS)[Y/m/n/?]選擇「y」,內核將提供對automounter的支持,使系統在啟動時自動mount遠程文件系統。
(3)、DOSFATfssupport(CONFIG_FAT_FS)[N/y/m/?]選擇「y」,內核將支持DOSFAT文件系統。
(4)、ISO9660CDROMfilesystemsupport(CONFIG_ISO9660_FS)[Y/m/n/?]
選擇「y」,內核將支持ISO9660CDROM文件系統。
(5)、NTFSfilesystemsupport(readonly)(CONFIG_NTFS_FS)[N/y/m/?]
選擇「y」,用戶就可以以只讀方式訪問NTFS文件系統。
(6)、/procfilesystemsupport(CONFIG_PROC_FS)[Y/n/?]/proc是存放Linux系統運行狀態的虛擬文件系統,該項必須選擇「y」。
(7)、Secondextendedfssupport(CONFIG_EXT2_FS)[Y/m/n/?]EXT2是Linux的標准文件系統,該項也必須選擇「y」。
14、NetworkFileSystems(網路文件系統)
(1)、NFSfilesystemsupport(CONFIG_NFS_FS)[Y/m/n/?]選擇「y」,內核將支持NFS文件系統。
(2)、SMBfilesystemsupport(tomountWfWsharesetc.)(CONFIG_SMB_FS)
選擇「y」,內核將支持SMB文件系統。
(3)、NCPfilesystemsupport(tomountNetWarevolumes)(CONFIG_NCP_FS)
選擇「y」,內核將支持NCP文件系統。
15、PartitionTypes(分區類型)
該選項支持一些不太常用的分區類型,用戶如果需要,在相應的選項上選擇「y」即可。
16、Consoledrivers(控制台驅動)
VGAtextconsole(CONFIG_VGA_CONSOLE)[Y/n/?]選擇「y」,用戶就可以在標準的VGA顯示方式下使用Linux了。
17、Sound(聲音)
Soundcardsupport(CONFIG_SOUND)[N/y/m/?]選擇「y」,內核就可提供對音效卡的支持。
18、Kernelhacking(內核監視)
MagicSysRqkey(CONFIG_MAGIC_SYSRQ)[N/y/?]選擇「y」,用戶就可以對系統進行部分控制。一般情況下選擇「n」。
六、編譯內核
(一)、建立編譯時所需的從屬文件
#cd/usr/src/linux
#makedep
(二)、清除內核編譯的目標文件
#makeclean
(三)、編譯內核
#makezImage
內核編譯成功後,會在/usr/src/linux/arch/i386/boot目錄中生成一個新內核的映像文件zImage。如果編譯的內核很大的話,系統會提示你使用makebzImage命令來編譯。這時,編譯程序就會生成一個名叫bzImage的內核映像文件。
(四)、編譯可載入模塊
如果用戶在配置內核時設置了可載入模塊,則需要對這些模塊進行編譯,以便將來使用insmod命令進行載入。
#makemoles
#makemodelus_install
編譯成功後,系統會在/lib/moles目錄下生成一個2.3.14子目錄,裡面存放著新內核的所有可載入模塊。
七、啟動新內核
(一)、將新內核和System.map文件拷貝到/boot目錄下
#cp/usr/src/linux/arch/i386/boot/bzImage/boot/vmlinuz-2.3.14
#cp/usr/src/linux/System.map/boot/System.map-2.3.14
#cd/boot
#rm-fSystem.map
#ln-sSystem.map-2.3.14System.map
(二)、配置/etc/lilo.conf文件。在該文件中加入下面幾行:
default=linux-2.3.14
image=/boot/vmlinuz-2.3.14
label=linux-2.3.14
root=/dev/hda1
read-only
(三)、使新配置生效
#/sbin/lilo
(四)、重新啟動系統
#/sbin/reboot
新內核如果不能正常啟動,用戶可以在LILO:提示符下啟動舊內核。然後查出故障原因,重新編譯新內核即可。
7. 記一下archlinux 安裝長期支持內核 linux-lts
警示:新手接觸沒幾氏型激天,謹慎!!!
有個程序不兼容新內核5.7的,所以更換為最新版本長期支持內核。先安裝內核和頭文件,然後修改或重新升成引導。修改地方可以網路
1.安裝長期支持內核和頭文件
2.重新生成引導文件。把安裝系統時升成引導文件的命令重新殲襪來一遍,如果沒有修改租卜過一般是這個
3.沒有圖形界面直接重啟。有圖形界面尤其是N卡私有驅動,重新裝一遍驅動(不清楚哪個文件的問題,所以我全部重新裝了,我是N卡。如果沒有安裝重啟進不來系統,又進不去命令行界面的,拿live系統掛載系統裝一下這個驅動:我就是。。。)A卡不知道
4.重啟
8. debian的內核頭文件在哪
Debian 系統的內核頭文件通常存儲在 /usr/include/linux 目錄下。在該目枯枯錄下,包含了大量的頭文件,用於編寫和編譯 Linux 內核相關的程序和庫。
如果你需要查找特定的內沒慶洞核頭文件,可以使用 find 命令進行搜索。例如,要查找名為 errno.h 的頭文件,可以執行以下命令:
plaintext
Copy code
sudo find /usr/include/linux -name errno.h
其中,-name 選項指定要搜索的文件名,/usr/include/linux 是要搜索的目錄。由於內核頭文件通常需要特權訪問,因此在執行該差亂命令時需要使用 sudo 命令或者以 root 用戶身份運行。
除了 /usr/include/linux 目錄外,Debian 系統的內核頭文件還可能存儲在其他目錄中,具體取決於安裝的內核版本和相關的軟體包。如果你無法在 /usr/include/linux 目錄下找到所需的頭文件,可以嘗試在其他目錄中進行搜索。
9. linux 下的內核頭文件放在哪裡
linux下的內核頭文件放在/usr/include/linux/和/usr/include/sys/
linux目錄樹:
scripts目錄
該目錄中不包含任何核心代碼,該目錄下存放了用來配置內核的腳本和應用程序源碼。
lib目錄
該目錄主要包含兩部分內容:gnuzip解壓縮演算法,用於在系統啟動過程中將壓縮的內核鏡像解壓縮;剩餘的文件用於實現一個C庫的子集,主要包括字元串和內存操作等相關函數。
mm目錄
該目錄包含了體系結構無關的內存管理代碼,包括通用的分頁模型的框架、夥伴演算法的實現和對象緩沖器slab的實現代碼。
include目錄
這個目錄包含了Linux源代碼目錄樹中絕大部分頭文件,每個體系架構都在該目錄下對應一個子目錄,該子目錄中包含了給定體系結構所必需的宏定義和內聯函數。
init目錄
該目錄中存放的是系統核心初始化代碼,內核初始化入口函數start_kernel就是在該目錄中的文件main.c內實現的。
kernel目錄
該目錄中存放的是Linux內核的最核心的代碼,用於實現系統的核心模塊,這些模塊包括:進程管理、進程調度器、中斷處理、系統時鍾管理、同步機制等。
arch目錄
該目錄中的每個子目錄中都與某種體系結構相對應,用於存放體系結構相關代碼,向平台無關的系統核心模塊提供所需的功能介面。每個體系結構對應的子目錄下通常至少包含以下幾個子目錄:kernel子目錄、lib子目錄、mm子目錄、boot子目錄。
系統次核心組件包括:
block目錄:用於實現塊設備的基本框架和塊設備的I/O調度演算法。
usr目錄:該目錄中的代碼為內核尚未完全啟動時執行用戶空間代碼提供了支持
ipc目錄:該目錄中的文件用於實現System V的進程間通信模塊。
driver目錄:用於存放各類設備的驅動程序。
sound目錄:存放了聲音系統架構,如Open Sound System(OSS)、Advanced Linux Sound Architecture(ALSA)的相關代碼和具體音效卡的設備驅動程序。
security目錄:存放了Security-Enhanced Linux(SELinux)安全框架的實現代碼
crypto目錄:該目錄中存放了相關的加密演算法的代碼。
Documentation目錄:存放了與內核相關的文檔。
net和fs目錄:包含linux內核支持的眾多網路協議和文件系統。
10. 在linux下編譯字元設備驅動程序但無法識別頭文件感覺是內核缺少頭文件包,如何用apt命令安裝內核源代碼包
1、你的字元設備驅動是單獨一個設備模塊嗎?
一般情況下頭文件是全的,檢查一下你的Makefile中kernel目錄指定得是否正確:
KDIR := /lib/moles/`uname -r`/build
或者:
KERNEL := /usr/src/linux-source-2.6.32
2、如果要安裝全部源碼的話先下載下來,再解壓到/usr/src
sudo apt-get install linux-source