菜单

定制内核加载启动画面

2016年11月1日 - 创客生活

今天突然想做一款操作系统,能够定制启动画面:https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel

我参考这个文件尝试一下。

测试中各种报错:

perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = (unset), LC_CTYPE = "zh_CN.UTF-8", LANG = "zh_CN.UTF-8" are supported and installed on your system. perl: warning: Falling back to the standard locale ("C").

更改一下locales

$ sudo locale-gen zh_CN zh_CN.UTF-8

Generating locales...
  zh_CN.GB2312... done
  zh_CN.UTF-8... done
Generation complete.

 

$ sudo dpkg-reconfigure locales

Generating locales...
  en_AG.UTF-8... done
  en_AU.UTF-8... done

 

apt-get

一般情况下,要生成特定的二进制包的话,需要使用apt-get source <package> 命令来获取。例如获取当前运行的内核的源码包可以用下面的命令:

apt-get source linux-image-$(uname -r)

 

如果用git

所有Ubuntu 内核源码都是在git下面维护的,每个发行版的分支都在在kernel.ubuntu.com的git仓库里维护着的,要包含一个本地的拷贝你就可以通过简单的git clone命令来获取git仓库的资源,例如:

git clone git://kernel.ubuntu.com/ubuntu/ubuntu-<release codename>.git

例如要包含 precise 树的内容就可以利用下面的命令: 

git clone git://kernel.ubuntu.com/ubuntu/ubuntu-precise.git

构建环境:

如果你从来没有在你系统里面构建过内核的话,你要记得下面几个包在你编译内核的时候需要用到,你可以通过下面的命令实现:

​sudo apt-get build-dep linux-image-$(uname -r)

修改配置:

如果没有配置改动的话,这步可以跳过。构建的进程将会从变量子配置文件中读取配置并放在一起。 最常见的方法是执行下面的操作: 

chmod a+x debian/rules
chmod a+x debian/scripts/*
chmod a+x debian/scripts/misc/*
fakeroot debian/rules clean
fakeroot debian/rules editconfigs   #这一步你要用Y做很多的确认。

这一步会利用当前的配置为每个架构或者平台提供一个menuconfig的编辑器环境支持。chmod命令是需要在这里使用到的,因为源码包一旦建立就会丢失脚本的执行权。

为了鉴别你的新内核和你构建主机的内核版本,你需要添加一个本地版本标签,例如在开始编译前,添加:“+test1”在第一个版本号的后面,并写入 debian.master/changelog 文件里。这将会帮助你区分你自己构建的内核信息,当你执行uname -a的时候也会提示出来。需要注意的是,当你的新Ubuntu内核发布了,这个内核将会比你的内核要新。所以更新的时候要特别注意。切忌:不要试图用 CONFIG_LOCALVERSION 这个变量,这个会破坏构建的内核。 

构建内核

构建内核非常简单.切换目录到你内核源代码的目录,然后输入下面的命令:

fakeroot debian/rules clean
# 快速构建:
fakeroot debian/rules binary-headers binary-generic
# 如果你需要linux的工具或者一个低延迟的内核,用这条命令:
fakeroot debian/rules binary

如果构建成功了,在你的构建主目录上级的目录里面会有三个.deb结尾的二进制包生成。例如:在amd64位系统上构建完内核版本为 "4.8.0-17.19" 就会有3到4个.deb的包生成: 

cd ..
ls *.deb
    linux-headers-4.8.0-17_4.8.0-17.19_all.deb
    linux-headers-4.8.0-17-generic_4.8.0-17.19_amd64.deb
    linux-image-4.8.0-17-generic_4.8.0-17.19_amd64.deb

在后期发布的版本中你也会发现如果出现了linux-extra-pacake 的包,你也需要将其安装上去。

测试新内核

安装这三个包的集合(在你构建的系统或者你构建的目标系统上)执行下面的命令就可以进行安装了。安装完成记得重启系统。

sudo dpkg -i linux*4.8.0-17.19*.deb
sudo reboot

 

Debug Symbols

有时候,debug一下symbols(符号链接)也是很有必要的,如果要做这个debug操作,还需要多两步,第一:pkg-config-dbgsym 需要提前安装好;第二:当你执行二进制文件“binary-* targets”的时候你需要添加: skipdbg=false 。 

sudo apt-get install pkg-config-dbgsym

fakeroot debian/rules clean

fakeroot debian/rules binary-headers binary-generic skipdbg=false

 

参考

上面的步骤都很简单,你如果有兴趣可以看看更深的内容:

Kernel Git Guide

More information about using git to pull down the kernel sources.

ARM Cross Compile

For more info about ARM and cross compilation.