【Linux】【Basis】Kernel
Linux Kernel: CentOS启动流程:POST --> Bootloader(BIOS, MBR) --> Kernel(initrd) --> rootfs --> switch_root --> /sbin/init root (hd0,0) kernel initrd ldd命令: - print shared library dependencies ldd [OPTION]... FILE... 内核设计体系:单内核、微内核 Linux:单内核设计,但充分借鉴了微内核体系的设计的优点;为内核引入了模块化机制; 内核的组成部分: kernel:内核核心,一般为bzImage,通常位于/boot目录,名称为vmlinuz-VERSION-release; kernel object:内核对象,即内核模块,一般放置于/lib/modules/VERSION-release/ 内核模块与内核核心版本一定要严格匹配; [ ]:N [M]:Module [*]:Y,编译进内核核心 内核:动态装载和卸载; ramdisk:辅助性文件,并非必须,这取决于内核是否能直接驱动rootfs所在的设备; 目标设备驱动,例如SCSI设备的驱动; 逻辑设备驱动,例如LVM设备的驱动; 文件系统,例如xfs文件系统; ramdisk:是一个简装版的根文件系统; 内核信息获取: uname命令: - print system information 格式:uname [OPTION]... -r:内核的release号 -n:主机名 文件:/boot/vmlinuz-VERSION-release 模块信息获取和管理: lsmod命令: - Show the status of modules in the Linux Kernel 显示的内核来自于/proc/modules modinfo命令: - Show information about a Linux Kernel module modinfo [-F field] [-k kernel] [modulename|filename...] -F field: 仅显示指定字段的信息; -n:显示文件路径; modprobe命令: - Add and remove modules from the Linux Kernel 格式:modprobe [-r] module_name 模块的动态装载:modprobe module_name 动态卸载:modprobe -r module_name depmod命令: - Generate modules.dep and map files. 内核模块依赖关系文件的生成工具; 模块的装载和卸载的另一组命令: insmod命令: insmod [filename] [module options...] filename:模块文件的文件路径; rmmod命令: rmmod [module_name] ramdisk文件的管理: (1) mkinitrd命令 为当前使用中的内核重新制作ramdisk文件: # mkinitrd [OPTION...] [<initrd-image>] <kernel-version> --with=<module>:除了默认的模块之外需要装载至initramfs中的模块; --preload=<module>:initramfs所提供的模块需要预先装载的模块; 示例: ~]# mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) (2) dracut命令 - low-level tool for generating an initramfs image # dracut [OPTION...] [<image> [<kernel version>]] 示例: ~]# dracut /boot/initramfs-$(uname -r).img $(uname -r) 内核信息输出的伪文件系统: /proc:内核状态和统计信息的输出接口;同时,还提供一个配置接口,/proc/sys; 参数: 只读:信息输出;例如/proc/#/* 可写:可接受用户指定一个“新值”来实现对内核某功能或特性的配置;/proc/sys/ /proc/sys: net/ipv4/ip_forward 相当于 net.ipv4.ip_forward (1) sysctl命令 专用于查看或设定/proc/sys目录下参数的值; sysctl [options] [variable[=value]] 查看: # sysctl -a # sysctl variable 修改其值: # sysctl -w variable=value (2) 文件系统命令(cat, echo) 查看: # cat /proc/sys/PATH/TO/SOME_KERNEL_FILE 设定: # echo "VALUE" > /proc/sys/PATH/TO/SOME_KERNEL_FILE 注意:上述两种方式的设定仅当前运行内核有效; (3) 配置文件:/etc/sysctl.conf, /etc/sysctl.d/*.conf 立即生效的方式:sysctl -p [/PATH/TO/CONFIG_FILE] 内核参数: net.ipv4.ip_forward:核心转发; vm.drop_caches: kernel.hostname:主机名; net.ipv4.icmp_echo_ignore_all:忽略所有ping操作; /sys目录: sysfs:输出内核识别出的各硬件设备的相关属性信息,也有内核对硬件特性的可设置参数;对此些参数的修改,即可定制硬件设备工作特性; udev:通过读取/sys目录下的硬件设备信息按需为各硬件设备创建设备文件;udev是用户空间程序;专用工具:devadmin, hotplug; udev为设备创建设备文件时,会读取其事先定义好的规则文件,一般在/etc/udev/rules.d/目录下,以及/usr/lib/udev/rules.d/目录下; 回顾:内核 内核的组成部分:kernel, kernel object, ramdisk kernel: uname kernel object: lsmod, modinfo, modprobe, insmod, rmmod, depmod ramdisk:mkinitrd, dracut 启动流程: POST --> BootSequence(BIOS) --> Bootloader (MBR) --> kernel (ramdisk) --> rootfs (switch_root) --> /sbin/init (/etc/inittab, /etc/init/*.conf, /usr/lib/systemd/system/)--> 默认运行级别、系统初始化、关闭及启动服务、启动终端(图形终端) grub: 1st stage:mbr 1_5 stage: mbr之后的扇区 2nd stage:/boot/grub/ 加密:编辑、内核 编译内核: 程序包的编译安装: ./configure, make, make install 前提:开发环境(开发工具,开发库),头文件:/usr/include 开源:源代码 --> 可执行格式 发行版:以“通用”的目标; 前提: (1) 准备好开发环境; (2) 获取目标主机上硬件设备的相关信息; (3) 获取到目标主机系统功能的相关信息,例如要启用的文件系统; (4) 获取内核源代码包:www.kernel.org 准备开发环境: CentOS 6.7: 包组: Development Tools Server Platform Development CentOS 7: 包组: Development Tools Server Platform Development 包: ncurses-devel 获取目标主机上硬件设备的相关信息: CPU: ~]# cat /proc/info ~]# lscpu ~]# x86info -a PCI设备: ~]# lspci -v -vv ~]# lsusb -v -vv ~]# lsblk 了解全部硬件设备信息: ~]# hal-device 内核编译过程: 步骤: ~]# tar xf linux-3.10.67.tar.xz -C /usr/src ~]# cd /usr/src ~]# ln -s linux-3.10.67 linux ~]# cd linux ~]# make menuconfig 配置内核选项 ~]# make [-j #] 编译内核,可使用-j指定编译线程数量 ~]# make modules_install 安装内核模块 ~]# make install 安装内核 重启系统,选择使用新内核; screen命令: 打开screen: ~]# screen 拆除screen: Ctrl+a, d 列出screen: ~]# screen -ls 连接至screen: ~]# screen -r SCREEN_ID 关闭screen: ~]# exit 过程的详细说明: (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以及编辑器备份文件;【Linux】【Basis】Kernel的更多相关文章
- 【Linux探索之旅】第二部分第二课:命令行,世界尽在掌握
内容简介 1.第二部分第二课:命令行,世界尽在掌握 2.第二部分第三课预告:文件和目录,组织不会亏待你 命令行,世界尽在掌握 今天的标题是不是有点霸气侧漏呢? 读者:“小编,你为什么每次都要起这么非主 ...
- 【Linux探索之旅】第一部分第五课:Unity桌面,人生若只如初见
内容简介 1.第一部分第五课:Unity桌面,人生若只如初见 2.第一部分第六课预告:Linux如何安装在虚拟机中 Unity桌面,人生若只如初见 不容易啊,经过了前几课的学习,我们认识了Linux是 ...
- 两款【linux字符界面下】显示【菜单】,【选项】的powershell脚本模块介绍
两款[linux字符界面下]显示[菜单],[选项]的powershell脚本模块介绍 powershell linux ps1 menu choice Multiselect 传教士 菜单 powe ...
- 【Linux探索之旅】第二部分第五课:用户和权限,有权就任性
内容简单介绍 .第二部分第五课:用户和权限,有权就任性 2.第二部分第六课预告:Nano,刚開始学习的人的文本编辑器 用户和权限.有权就任性 今天的标题也挺任性的啊,虽说小编是一个非常本分的人(真的吗 ...
- 【Linux探索之旅】开宗明义+第一部分第一课:什么是Linux?
内容简介 1.课程大纲 2.第一部分第一课:什么是Linux? 3.第一部分第二课预告:下载Linux,免费的噢! 开宗明义 我们总听到别人说:Linux挺复杂的,是给那些追求逼格的程序员用的.咱 ...
- 【LINUX/UNIX网络编程】之简单多线程服务器(多人群聊系统)
RT,Linux下使用c实现的多线程服务器.这个真是简单的不能再简单的了,有写的不好的地方,还希望大神轻拍.(>﹏<) 本学期Linux.unix网络编程的第四个作业. 先上实验要求: [ ...
- 【LINUX/UNIX网络编程】之使用消息队列,信号量和命名管道实现的多进程服务器(多人群聊系统)
RT,使用消息队列,信号量和命名管道实现的多人群聊系统. 本学期Linux.unix网络编程的第三个作业. 先上实验要求: 实验三 多进程服务器 [实验目的] 1.熟练掌握进程的创建与终止方法: 2 ...
- 【Linux/unix网络编程】之使用socket进行TCP编程
实验一 TCP数据发送与接收 [实验目的] 1.熟练掌握套接字函数的使用方法. 2.应用套接字函数完成基本TCP通讯,实现服务器与客户端的信息交互. [实验学时] 4学时 [实验内容] 实现一个服务器 ...
- 【Linux探索之旅】第一部分第二课:下载Linux,免费的噢
内容简介 1.第一部分第二课:下载Linux,免费的噢 2.第一部分第三课预告:测试并安装Ubuntu 下载Linux,免费的噢 大家好,上一课我们认识了非常“霸气侧漏”的Linux操作系统. 也知道 ...
- 【Linux探索之旅】第一部分第三课:测试并安装Ubuntu
内容简介 1.第一部分第三课:测试并安装Ubuntu 2.第一部分第四课预告:磁盘分区 测试并安装Ubuntu 大家好,经过前两个比较偏理论(是否想起了带着瓜皮帽,手拿折扇的老学究,或者腐儒)的课程, ...
随机推荐
- Docker多机网络
前言 前面的文章主要聚焦于单机网络上,对于生产环境而言,单机环境不满足高可用的特点,所以是不具备上生产的条件,因此在开始Docker Swarm篇的时候我们先来聊聊多机网络之间Docker的通信如何做 ...
- gcc: fatal error: limits.h: No such file or directory on macos
重装gcc brew install gcc 软链接链到新的gcc和g++ https://stackoverflow.com/questions/56280122/gcc-fatal-error-l ...
- Kafka面试题总结
1.Kafka 都有哪些特点? 高吞吐量.低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partit ...
- Go语言核心36讲(Go语言实战与应用六)--学习笔记
28 | 条件变量sync.Cond (下) 问题 1:条件变量的Wait方法做了什么? 在了解了条件变量的使用方式之后,你可能会有这么几个疑问. 1.为什么先要锁定条件变量基于的互斥锁,才能调用它的 ...
- [loj3523]分糖果
做法1 将问题离线,并在左端点和右端点打上差分,之后即可以看作求$f(C,[a_{1},a_{2},...,a_{n}])$,其表示以$C$为上限(0为下限),从0开始不断加上$a_{i}$(可以为负 ...
- [atAGC049E]Increment Decrement
由于每一个操作的逆操作都存在,可以看作将$a_{i}$全部变为0的代价 先考虑第一个问题,即对于确定的$a_{i}$如何处理 如果仅能用第2种操作,定义点$i$的代价为以$i$为左端点或以$i-1$为 ...
- 《HelloGitHub》第 68 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. https://github.com/521xueweiha ...
- [ Skill ] 图形化组件在注册 User Trigger 时需要注意的事情
https://www.cnblogs.com/yeungchie/ 使用 deRegUserTriggers 可以用来配置:当打开一个新窗口时,自动集成自定义的菜单.工具栏等等. 使用格式如下: d ...
- Codeforces 1413F - Roads and Ramen(树的直径+找性质)
Codeforces 题目传送门 & 洛谷题目传送门 其实是一道还算一般的题罢--大概是最近刷长链剖分,被某道长链剖分与直径结合的题爆踩之后就点开了这题. 本题的难点就在于看出一个性质:最长路 ...
- Atcoder Grand Contest 006 D - Median Pyramid Hard(二分+思维)
Atcoder 题面传送门 & 洛谷题面传送门 u1s1 Atcoder 不少思维题是真的想不出来,尽管在 Atcoder 上难度并不高 二分答案(这我倒是想到了),检验最上面一层的数是否 \ ...