百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

linux kernel内核的头文件获取、安装等方法

gudong366 2025-04-07 16:41 8 浏览

交叉编译时经常会用到这些头文件。

下载合适版本的linux

地址:

  • https://mirrors.aliyun.com/linux-kernel/
  • https://mirrors.edge.kernel.org/pub/linux/kernel/

解压:

biren@ubuntu:~/crossbuild/src$ tar jxf linux-3.9.tar.bz2 

配置内核:

biren@ubuntu:~/crossbuild/src/linux-3.9$ make ARCH=arm menuconfig
  HOSTCC  scripts/kconfig/conf.o
  HOSTCC  scripts/kconfig/lxdialog/checklist.o
  HOSTCC  scripts/kconfig/lxdialog/inputbox.o
  HOSTCC  scripts/kconfig/lxdialog/menubox.o
  HOSTCC  scripts/kconfig/lxdialog/textbox.o
。。。

检查源文件中的头文件:

命令:make ARCH=arm headers_check

ARCH用于指定目标架构

biren@ubuntu:~/crossbuild/src$ cd linux-3.9/
biren@ubuntu:~/crossbuild/src/linux-3.9$ make mrproper
biren@ubuntu:~/crossbuild/src/linux-3.9$ make ARCH=arm headers_check
  CHK     include/generated/uapi/linux/version.h
  UPD     include/generated/uapi/linux/version.h   此时会生成version.h文件
  HOSTCC  scripts/basic/fixdep
  WRAP    arch/arm/include/generated/asm/auxvec.h
  WRAP    arch/arm/include/generated/asm/bitsperlong.h
  WRAP    arch/arm/include/generated/asm/cputime.h
。。。
  WRAP    arch/arm/include/generated/asm/types.h
  WRAP    arch/arm/include/generated/asm/unaligned.h
  HOSTCC  scripts/unifdef
  INSTALL include/asm-generic (35 files)
。。。
  INSTALL include/uapi (0 file)
  INSTALL include/asm (34 files)
  CHECK   include/asm-generic (35 files)
  。。。
  CHECK   include/linux (382 files)
/home/biren/crossbuild/src/linux-3.9/usr/include/linux/kexec.h:49: userspace cannot reference function or variable defined in the kernel
/home/biren/crossbuild/src/linux-3.9/usr/include/linux/soundcard.h:1054: userspace cannot reference function or variable defined in the kernel
 。。。
  CHECK   include/uapi (0 files)
  CHECK   include/asm (34 files)

生成头文件:

make ARCH=arm INSTALL_HDR_PATH=./jwj/ headers_install

INSTALL_HDR_PATH=./jwj用于指定新的头文件存放目录

biren@ubuntu:~/crossbuild/src/linux-3.9$ make ARCH=arm INSTALL_HDR_PATH=./jwj/ headers_install
  CHK     include/generated/uapi/linux/version.h  
  INSTALL jwj//include/asm-generic/ (35 files)
  INSTALL jwj//include/drm/ (15 files)
  INSTALL jwj//include/linux/byteorder/ (2 files)
  INSTALL jwj//include/linux/caif/ (2 files)
  INSTALL jwj//include/linux/can/ (5 files)
  INSTALL jwj//include/linux/dvb/ (8 files)
  INSTALL jwj//include/linux/hdlc/ (1 file)
  INSTALL jwj//include/linux/hsi/ (1 file)
  INSTALL jwj//include/linux/isdn/ (1 file)
  INSTALL jwj//include/linux/mmc/ (1 file)
  INSTALL jwj//include/linux/netfilter/ipset/ (4 files)
  INSTALL jwj//include/linux/netfilter/ (78 files)
  INSTALL jwj//include/linux/netfilter_arp/ (2 files)
  INSTALL jwj//include/linux/netfilter_bridge/ (18 files)
  INSTALL jwj//include/linux/netfilter_ipv4/ (10 files)
  INSTALL jwj//include/linux/netfilter_ipv6/ (12 files)
  INSTALL jwj//include/linux/nfsd/ (5 files)
  INSTALL jwj//include/linux/raid/ (2 files)
  INSTALL jwj//include/linux/spi/ (1 file)
  INSTALL jwj//include/linux/sunrpc/ (1 file)
  INSTALL jwj//include/linux/tc_act/ (7 files)
  INSTALL jwj//include/linux/tc_ematch/ (4 files)
  INSTALL jwj//include/linux/usb/ (10 files)
  INSTALL jwj//include/linux/wimax/ (1 file)
  INSTALL jwj//include/linux/ (382 files)
  INSTALL jwj//include/mtd/ (5 files)
  INSTALL jwj//include/rdma/ (6 files)
  INSTALL jwj//include/scsi/fc/ (4 files)
  INSTALL jwj//include/scsi/ (3 files)
  INSTALL jwj//include/sound/ (10 files)
  INSTALL jwj//include/video/ (3 files)
  INSTALL jwj//include/xen/ (2 files)
  INSTALL jwj//include/uapi/ (0 file)
  INSTALL jwj//include/asm/ (34 files)

查看结果:

biren@ubuntu:~/crossbuild/src/linux-3.9/jwj/include$ ll
total 60
drwxrwxr-x 13 biren biren  4096 Apr 29 16:11 ./
drwxrwxr-x  3 biren biren  4096 Apr 29 16:11 ../
drwxrwxr-x  2 biren biren  4096 Apr 29 16:11 asm/
drwxrwxr-x  2 biren biren  4096 Apr 29 16:11 asm-generic/
drwxrwxr-x  2 biren biren  4096 Apr 29 16:11 drm/
drwxrwxr-x 23 biren biren 12288 Apr 29 16:11 linux/
drwxrwxr-x  2 biren biren  4096 Apr 29 16:11 mtd/
drwxrwxr-x  2 biren biren  4096 Apr 29 16:11 rdma/
drwxrwxr-x  3 biren biren  4096 Apr 29 16:11 scsi/
drwxrwxr-x  2 biren biren  4096 Apr 29 16:11 sound/
drwxrwxr-x  2 biren biren  4096 Apr 29 16:11 uapi/
drwxrwxr-x  2 biren biren  4096 Apr 29 16:11 video/
drwxrwxr-x  2 biren biren  4096 Apr 29 16:11 xen/
biren@ubuntu:~/crossbuild/src/linux-3.9$ tree -d ./jwj
./jwj
└── include
    ├── asm   交叉编译工具用到
    ├── asm-generic  交叉编译工具用到
    ├── drm
    ├── linux  交叉编译工具用到
    │   ├── byteorder
    │   ├── caif
    │   ├── can
    │   ├── dvb
    │   ├── hdlc
    │   ├── hsi
    │   ├── isdn
    │   ├── mmc
    │   ├── netfilter
    │   │   └── ipset
    │   ├── netfilter_arp
    │   ├── netfilter_bridge
    │   ├── netfilter_ipv4
    │   ├── netfilter_ipv6
    │   ├── nfsd
    │   ├── raid
    │   ├── spi
    │   ├── sunrpc
    │   ├── tc_act
    │   ├── tc_ematch
    │   ├── usb
    │   └── wimax
    ├── mtd
    ├── rdma
    ├── scsi
    │   └── fc
    ├── sound
    ├── uapi  交叉编译工具用到
    ├── video
    └── xen
35 directories

其中重要的几个是:asm, asm-generic, linux , uapi

uapi是从各模块抽取出来的用于启动内核相关的。

====================================

低版本的内核头文件获取不需要以上步骤,只需从源码文件中复制出来即可。

如linux-2.6.10版本

存放在linux-2.6.10/include里

biren@ubuntu:~/crossbuild/src/linux-2.6.10/include$ ls
acpi       asm-generic  asm-m68k       asm-ppc64  asm-sparc64  math-emu  rxrpc
asm-alpha  asm-h8300    asm-m68knommu  asm-s390   asm-um       media     scsi
asm-arm    asm-i386     asm-mips       asm-sh     asm-v850     mtd       sound
asm-arm26  asm-ia64     asm-parisc     asm-sh64   asm-x86_64   net       video
asm-cris   asm-m32r     asm-ppc        asm-sparc  linux        pcmcia

其中:asm-xxx对应asm, 选择适合的将它改名为asm即可,低版本中没有uapi目录

高版本中的asm存放在arch/arm/include下面。

====================================

如果要在系统中安装头文件可用如下命令:

apt-get install linux-headers

sudo apt-get install linux-headers
[sudo] password for biren: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package linux-headers is a virtual package provided by:
  linux-headers-5.4.0-1019-ibm 5.4.0-1019.21~18.04.1
  linux-headers-5.4.0-1018-ibm 5.4.0-1018.20~18.04.1
  linux-headers-5.4.0-1017-ibm 5.4.0-1017.19~18.04.1
  linux-headers-5.4.0-1015-ibm 5.4.0-1015.16~18.04.1
  linux-headers-5.4.0-1014-ibm 5.4.0-1014.15~18.04.1
  linux-headers-5.4.0-1012-ibm 5.4.0-1012.13~18.04.1
  linux-headers-5.4.0-1010-ibm 5.4.0-1010.11~18.04.2
  linux-headers-5.3.0-1045-gke 5.3.0-1045.48
  linux-headers-5.3.0-1044-gke 5.3.0-1044.47
。。。。。。

其它说明 :

include/linux目录里必须有version.h,如果没有可以手动添加

方法如下:

(198912是版本0x03/0x09/0x00组合而成的0x030900的十进制)

#define UTS_RELEASE "3.9.0"
#define LINUX_VERSION_CODE 198912
#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))

获取本源码内核所支持的架构:

biren@ubuntu:~/crossbuild/src/linux-2.6.10$ ls -d include/asm-* | sed 's/.*-//'
alpha
arm
arm26
cris
generic
h8300
i386
ia64
m32r
m68k
m68knommu
mips
parisc
ppc
ppc64
s390
sh
sh64
sparc
sparc64
um
v850
x86_64

或查看linux-2.6.10/arch目录

相关推荐

linux进程间的通信方式有哪些(linux怎么看这个进程在哪个路径下)

管道通信(PIPE)两个进程利用管道进行通信时.发送信息的进程称为写进程.接收信息的进程称为读进程。管道通信方式的中间介质就是文件.通常称这种文件为管道文件.它就像管道一样将一个写进程和一个读进程连接...

Linux守护进程 daemonize 命令(linux 守护进城)

daemonize:作为守护进程运行命令的工具daemonize是一个命令行实用程序,它作为Unix/Linux守护进程运行命令。daemonize工具是用C语言编写的。大多数程序被设计为作为守护...

linux进程间通信—信号(linux查看进程之间的通信指令i)

Linux环境进程间通信(二)信号(下)一、信号生命周期从信号发送到信号处理函数的执行完毕对于一个完整的信号生命周期(从信号发送到相应的处理函数执行完毕)来说,可以分为三个重要的阶段,这三个阶段由四个...

Linux 上以树状查看文件和进程(linux如何查看进程树)

提供了一些方便的命令,用于以树状分支形式查看文件和进程,从而易于查看它们之间的关系。在本文中,我们将介绍、和命令以及它们提供的一些选项,这些选项可帮助你将注意力集中在要查看的内容上。ps我们用...

文件搜不到?进程理不清?掌握这3个Linux技巧,效率直接翻倍!

哎家人们,今天必须跟你们唠唠Linux里那些“用了就回不去”的效率神器!我猜屏幕前肯定有不少朋友跟我之前一样——明明装着Linux当开发机/服务器,结果每天被命令行折腾得够呛:找个文件翻遍目录,看进程...

如何在 Linux 中使用 PID 号查找进程名称?

在Linux的复杂世界中,进程是系统运行的核心,每个进程都由一个唯一的「进程ID」(PID)标识。无论是系统管理员在排查失控进程,还是开发者在调试应用程序,知道如何将PID映射到对应的进程名称都是一项...

Linux进程深度解析(1):进程结构、内存布局与资源管理

0.简介进程是系统执行的核心单元,理解进程是我们诊断性能问题、开发高并发程序的基础。Linux进程深度解析系列将会从原理角度对进程进行深入分析,帮助读者系统的理解其设计的思路,让读者在理解原理的基础...

Linux 下如何查看进程的资源限制信息?

简介Linux上的cat/proc/$pid/limits命令提供有关特定进程的资源限制的信息,其中$pid是相关进程的进程ID(pid)。该文件是`/proc文件系统的一部分,该...

Linux 8种进程状态及状态转换(linux进程状态切换)

Linux8种进程状态通过psaux可以看到进程的状态。O:进程正在处理器运行,这个状态从来没有见过.S:休眠状态(sleeping)R:等待运行(runable)RRunningorrun...

如何查看linux后台运行的进程?如何查看后台运行进程的状态?

linux系统中挂在后台的进程,如何能够被运维人员知道呢?以及挂在后台的进程当前状态是怎样的?是否可以继续执行?如何杀死一个在后台挂起的进程?后台进程可以通过‘&’符号或nohup命令,让程序进入...

最新保姆级、超详细介绍VMware的使用(一)软件的安装

一、VMware简介VMWare虚拟机软件是一个“虚拟PC”软件,它使你可以在一台机器上同时运行二个或更多Windows、DOS、LINUX系统。与“多启动”系统相比,VMware采用了完全不同的概...

Shell脚本怎么写?(0)(shell脚本怎么写变量)

各位不好意思,最近加班+感冒,有三四天没更新了,python自动化脚本系列总共六期,基本已经囊括了编写python自动化脚本的所有基础函数和语法了。大家如果没看过这个系列的话,可以参考下面的链接:...

用Python从头开发一个自己的Shell(下)

编程派微信号:codingpy平常工作中经常用到shell吧?好不好奇shell的具体执行方式?今天推送的这两篇文章,将利用Python实现一些简单的shell功能。本文原作者为Su...

Linux编程Shell之入门——Shell函数返回值

在Shell中,函数可以通过返回值将结果传递给调用者。返回值可以是一个整数、字符串或其他类型的数据。以下是关于Shell函数返回值的详细介绍:使用return语句在Shell函数中,使用return...

Linux shell编程中易混淆的符号(linux中shell编程详解)

符号主要功能执行环境是否解析变量典型用例()子Shell执行命令子进程是隔离环境操作{}代码块或扩展当前Shell是(代码块内)组合命令或生成序列""弱引用字符串-是含变量...