1 Star 0 Fork 91

wudong / Linux学完就忘系列

forked from baoke / Linux学完就忘系列 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
35.Linux内核模块功能定制.md 4.02 KB
一键复制 编辑 原始数据 按行查看 历史
baoke 提交于 2019-08-08 13:53 . 更新 35.Linux内核模块功能定制.md

程序包编译安装:

./configure,make,make install

前提:开发环境(开发工具,开发库),头文件:/usr/include

开源:源代码-->可执行格式
发行版:以"通用"的目标

编译内核

前提:
(1) 准备好开发环境;
(2) 获取目标主机上硬件设备的相关信息;
(3) 获取到目标主机系统功能的相关信息,例如要启用的文件系统;
(4) 获取内核源代码包:www.kernel.org;

准备开发环境:
CentOS 6,7:
包组:
Development Tools
Server Platform Development

#查看包组
yum group list
#安装开发工具包组
yum groupinstall "开发工具" -y
#确保ncurses.x86_64包已安装
yum list all *ncurses

获取目标主机上硬件设备相关信息:

CPU:

#查看cpu信息
cat /proc/cpuinfo
lscpu

#安装x86info
yum -y install x86info
#查看所有cpu相关的详细信息
x86info -a

PCI设备:

#查看PCI设备信息
lspci
#查看每个PCI设备的详细信息
lspci -v
#查看每个PCI设备的更详细信息
lspci -vv

#查看usb设备信息
lsusb
#查看usb设备详细信息
lsusb -v

#查看硬盘信息
lsblk

内核编译过程:

步骤:
tar -xf linux-3.16.71.tar.xz -C /usr/src
cd /usr/src
ln -sv linux-3.16.71 linux
cd linux

make menuconfig 配置内核选项
make [-j #] 编译内核,可使用-j指定编译线程数量
make modules_install 安装内核模块
make install 安装内核

重启系统,选择使用新内核;

screen命令:
在终端模拟器上打开屏幕(在screen中执行的所有操作,不会因为你的ssh连接断开而终止)
打开screen:screen
拆除screen:Ctrl+a松开键盘,直接按d
列出screen:screen -ls
连接screen:screen -r SCREEN_ID
关闭screen:在screen内部输入exit

#安装
yum install -y screen
#打开screen,Ctrl+a松开键盘,直接按d,拆除  
screen
#列出screen
screen -ls
#连接id为82650的screen
screen -r 82650
#rz上传linux-3.16.71.tar.xz内核包
tar -xf linux-3.16.71.tar.xz -C /usr/src
#切换目录
cd /usr/src
#创建符号链接
ln -sv linux-3.16.71 linux
#进入解压目录
cd linux
#安装ncurses-devel
yum install -y ncurses-devel
#参照当前系统内核的模块配置
cp /boot/config-3.10.0-957.12.1.el7.x86_64 .config
#会打开一个文本菜单界面,可以选择哪些模块编译进内核等操作
make menuconfig
#打开screen
screen 
#指定4个线程,启动编译
make -j 4
#安装内核模块
make modules_install
#安装内核
make install
#重启系统,选择使用新内核;  

过程详细说明

(1) 配置内核选项
支持"更新"模式进行配置:在已有的.config文件的基础之上进行"修改"配置;
(a) make config:基于命令行以遍历的方式去配置内核中可配置的每个选项;
(b) make menuconfig:基于cureses的文本配置窗口;
(c) make gconfig:基于GTK开发环境的窗口界面;包组:"桌面平台开发"
(d) make xonfig:基于QT开发环境的窗口界面;
支持"全新配置"模式进行配置:
(a) make defconfig:基于内核为目标平台提供的"默认"配置为模板进行配置;
(b) make allnoconfig:所有选项均为"no";

(2) 编译
(a) 多线程编译:make [-j #]
(b) 编译内核中的一部分代码:
  (i) 只编译某子目录中的相关代码:
  cd /usr/src/linux
  make path/to/dir/

  (ii) 只编译一个特定的模块
  cd /usr/src/linux
  make path/to/dir/file.ko

(c) 如何交叉编译:
目标平台与当前编译操作所在的平台不同;

make ARCH=arch_name

要获取特定目标平台的使用帮助:
make ARCH=arch_name help

(3) 如何在执行过编译操作的内核源码树上做重新编译:
事先清理操作:
make clean:清理编译生成的绝对多数文件,但会保留config,及编译外部模块所需要的文件;
make mrproper:清理编译生成的所有文件,包括配置生成的config文件及某些备份文件;
make distclean:相当于mrproper,额外清理各种patches以及编辑器备份文件;

  

Shell
1
https://gitee.com/wudongmeng/linux.git
git@gitee.com:wudongmeng/linux.git
wudongmeng
linux
Linux学完就忘系列
master

搜索帮助