目录
设置内核
内核构建系统kbuild基于GNU make;编译内核的命令make执行,构建内核难点在编译前的配置; 主流发行版的内核配置为了能在更多的机器上运行,几乎选择了全部的配置选项,编译全部的驱动。要一个占用空间更小、运行更快的内核,就需要开发人员手动配置内核。
1 内核中配置选项是配置内核的重点;
2 内核启动的最后,内核要从根文件系统加载用户空间的程序转入用户空间。--准备一个基本的根文件系统配合内核启动。
内核映像
内核映像的组成:
分块:vmlinux.bin.gz->vmlinux.bin,setup.bin
推进系统设置:setup.bin(一级),内核非压缩部分(二级,负责重定位),有效载荷vmlinux(压缩内核,维持内核的正常加载)
映像的格式:
大部分为.BIN格式;
执行过程:
linux/arch/x86/boot/compressed/misc.c
Bootloader 一般情况:
不需要保留内核压缩部分为ELF格式,略去启动时进行的“parse_elf”。
具体的方法:
1.压缩部分链接为bin(裸二进制文件)
可追加 -O binary
eg:
Makefile:
OBJCOPYFLAGS_vmlinux.bin := -R .comment -S -O binary
2.删除(注释)parse_elf;
特殊情况:Xen domain builder
内核执行decompress函数,解压.bin文件之后,parse_elf函数执行处理elf格式的内核映像;
内核映像的构建过程
构建的内核映像为bzImage。
setup.bin |
.head.text.(startup_32 uncompressed) |
.rodata..compress(vmlinux.bin.gz)-compressed |
.text |
.rodata |
.eh_frame |
.got |
构建过程归纳:“三次编译,一次组合”
- 目标文件编译+链接ELF,存放顶层目录,构建有效载荷;
- 有效载荷的压缩;有效载荷和二级推进系统的链接为vmlinux;
- setup.elf
- 组合:vmlinux.bin和setup.bin的合并为bzImage;
内核构建和配置链接
linux界面下执行: make menuconfig
配置处理器
配置内核支持模块(支持的硬件、文件系统)
配置硬盘控制器驱动(SATA接口)
配置文件系统(Ext4文件系统)**
配置内核支持ELF文件格式
进程加载
创建新进程: 内核静态创建原始进程-->复制原始进程-->加载用户空间的.EXE
加载过程包括几个步骤:
- 内核从磁盘加载.EXE,建立进程地址空间;
- .EXE是动态链接,加载链接器+控制权转交到动态链接器;
- 动态链接器重定位自身;
- 动态链接器加载动态库到进程地址空间;
- 动态链接器重定位动态库、可执行程序,跳转可执行程序入口处执行;
构建根文件系统
- 安装GCC库
user@host:/username$ cp -d \
cross-tool/i686-none-linux-gnu/lib/lib*.so.*[0-9] \
rootfs/lib/
- 建立相关目录
user@host:/username/sysroot$ mkdir sys proc dev run root
- 构建程序/sbin/init:
在内核初始化的最后,启动的第一个进程要装载用户空间的程序从而切换到用户空间,通常这个程序是/sbin 目录下的init,因此我们要准备这个程序。
/vita/sysroot/sbin/init :
#!/bin/bash
export HOME=/root
exec /bin/bash -l
-
user@host:/username/sysroot/sbin$ chmod a+x init
/vita/sysroot/etc/profile:
export PS1="\[\e[31;1m\]\u@username:\[\e[35;1m\]\w#\[\e[0m\]"
tar zcvf . . /sysroot.tgz *
scp . . /sysroot.tgz \
root@192.168.56.101:/root/
tar xvf /root/sysroot.tgz
以读写模式重新挂载文件系统
配置内核支持网络
- 配置内核支持TCP/IP协议
- 配置内核支持网卡
- 网卡驱动编译成模块,启动自动加载,启动udev
/username/sysroot/sbin/init :
#!/bin/bash
mount -o remount,rw /dev/sda2 /
udevd --daemon
udevadm trigger --action=add
udevadm settle
export HOME=/root
exec /bin/bash -l
- 安装网络配置工具并配置网络
- 安装并配置ssh服务
安装X窗口系统(XORG)
X的实现者将X设计为CLIENT/SERVER架构。应用程序相当于客户端,X服务器负责管理显示设备和输入设备。应用程序只需要将请求,发送给X服务器,由X服务器负责将其绘制到具体的设备上。X服务器将用户输入,转发给对应的应用。
安装办法:
1.自动安装 build-X11.sh;
2.手动安装;
- 安装M4宏定义
- 安装X协议和拓展
- 安装X相关库和工具
- 安装X服务器
- 安装GPU的2D驱动
- 安装X的输入设备驱动
- 运行X服务器
- 配置内核支持DRM
- 安装图形库
- 安装字体(解决字符为“方框”--字符不显示问题)
//安装文泉驿字体 # mkdir -p /usr/share/fonts/ # scp \ /usr/share/fonts/truetype/wqy/wqy-microhei.ttc \ 192.168.56.2:/usr/share/fonts/