构建内核

目录

设置内核

内核映像

内核映像的构建过程

构建根文件系统

以读写模式重新挂载文件系统

配置内核支持网络

安装X窗口系统(XORG)


设置内核

内核构建系统kbuild基于GNU make;编译内核的命令make执行,构建内核难点在编译前的配置; 主流发行版的内核配置为了能在更多的机器上运行,几乎选择了全部的配置选项,编译全部的驱动。要一个占用空间更小、运行更快的内核,就需要开发人员手动配置内核。

1 内核中配置选项是配置内核的重点;

内核启动的最后,内核要从根文件系统加载用户空间的程序转入用户空间。--准备一个基本的根文件系统配合内核启动。

 

内核映像

内核映像的组成:

分块: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。

内核映像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 

加载过程包括几个步骤:

  1. 内核从磁盘加载.EXE,建立进程地址空间;
  2. .EXE是动态链接,加载链接器+控制权转交到动态链接器;
  3. 动态链接器重定位自身;
  4. 动态链接器加载动态库到进程地址空间;
  5. 动态链接器重定位动态库、可执行程序,跳转可执行程序入口处执行;

 

构建根文件系统

  • 安装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/ 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值