/usr/src,/usr/local/src : 放源码的位置。下源码后放在这些位置
tar xf linux-3.13.5.tar.xz -C /usr/src : 解压至 /usr/src下
ln -sv /usr/src/linux-3.13.5 /usr/src/linux : 指定一个软连接
编译内核:
第一步:配置内核,使用一种方法
选择要编译的模块
make config 一项一项选择
make allyesconfig 所有的都编译
make allnoconfig 可选的都不编译
cp /boot/config-* /usr/src/linux/.config
make menuconfig 选择编译
make kconfig (KDE桌面环境,并且安装了qt开发环境)
make gconfig (GNome桌面环境,并且安装了gkt开发环境)
第二步:编译
make -j # (多核cpu -j可以最大化的发挥cpu性能,#表示个数)
第三步:安装模块
make modules_install
第四步:安装内核
make install
第五步:检查,测试
grub.conf中是否已经有新的内核项配置
重启系统已尝试使用内核
生成的内核和文件系统在/boot 目录下vimliunz-xxxx initrf
注意:
screen命令
screen:打开一个新的screen
隐藏:ctrl+a,b
重新打开:
1 screen -ls 显示id
2 screen -r id 重新连接screen
exit:关闭
二次编译如何做清理操作:
#make clean:只清理编译生成的文件,但不删除配置文件 .config
#make mrproper: 删除编译生成的文件和.config
#make disclean: 重置源代码树
如何实现内核的部分编译:
1.只编译某子目录下的相关代码:
cd /usr/src/linux
make 子目录文件
make SUBDIR=arch/
make drivers/net/
2.只编译部分模块
make M=path/to/dir/
make M=drivers/net/
3.只编译某一个模块
make path/to/dir/module_name.ko
例:make drivers/net/e1000/e1000.ko
4.将编译后的结果放置于别的目录中
make O=/path/to/somewhere
如何实现交叉编译
make ARCH=架构
以arm为例:
make ARCH=arm 默认编译文件
查看硬件信息:
lspci
lscpu
lsblk
lshal = hal-device
dmidicode: 显示dmi的信息 显示BIOS
内核参数的查看与配置:
/proc/sys/
kernel net vm fs
配置参数:
echo "string" > /proc/sys/path/to/some_parameter
echo 1 > /proc/sys/net.ipv4/icmp_echo_ignore_all
sysctl -w
上面也可写成
sysctl -w net.ipv4.icmp_echo_ignore_all=1
查看参数:
sysctl -a
配置文件:
/etc/sysctl.conf
net.ipv4.ip_forward ip转发
kernel.hostname 主机名
net.ipv4.icmp_echo_ignore_all ping功能
vm.drop_caches 清除缓存
sysctl -p 重读配置文件
硬件设备:设备文件
2.4-:2W+
udev:用户空间程序
kenrel硬件探测过程在根文件系统挂载前就已经结束,启动udev daemon程序,要求内核重新探测硬件信息,并输出/sys目录,
由此udevadmin工具就可以根据/sys目录中硬件信息给每个硬件创建设备文件了
udev rules:udev规则文件,用于定义udev如何创建设备文件的
/etc/udev/rules.d/
kernel+initramfs(根文件系统所在设备的设备驱动模块)–>devtmpfs(用于在内核初始化时为基本设备创建设备文件的临时文件系统)
如何手动创建设备文件
mknod
mknod [option] ...NAME YTPE [MAJOR MINOR]
MAJOR:主设备号,表示设备类型
MINOR:同一设备的不同文件
例:mknod /dev/mydev b 100 0
选项:
-m MODE:指定权限
例子
mknod -m 660 /dev/testdev b 100 0