linux笔记 - 配置与编译
linux内核下载地址:https://www.kernel.org/
ubuntu下载内核对应源码:
sudo apt-get source linux-$(uname -r) #此命令下载的源码存放在/usr/src/文件夹中
配置:
内核编译时会根据内核目录下的.config文件进行编译,而进行内核配置时实际上就是修改.config文件.一般常见的硬件平台在内核目录arch/<平台>/configs/文件夹下会包含有默认的配置文件,可以使用cp命令将其覆盖内核根目录下的.config文件.
在编译前都必须使用配置命令在内核根目录下进行一次配置(即使是使用默认的配置文件也必须这样做).而配置命令有以下几种:
# make ARCH=<平台> config #比较繁琐,不推荐
# make ARCH=<平台> oldconfig #常用于内核升级,提示新内核特性
# make ARCH=<平台> menuconfig #常用
# make ARCH=<平台> xconfig #X界面的配置方式
# make ARCH=<平台> gconfig #GTK界面的配置方式
# make ARCH=<平台> defconfig #使用默认的配置
# make ARCH=<平台> allyesconfig #所有配置选项设置为yes
# make ARCH=<平台> allmodconfig #所有选项配置为module
在配置时,每一项都有几种选项,分别为Y,N,M.
* Y : 代表将此项编译入内核中
* N : 代表不将此项编译
* M : 代表将此项编译为模块,在需要使用到的时候再加载入内核
也可以通过直接修改内核源代码目录中的.config进行配置,不过此种方法有点麻烦,之后再说.
小提示:为了防止内核编译之后配置文件丢失的情况,可以在内核配置时选择:
General setup --->
<*> Kernel .config support
[*] Enable access to .config through /proc/config.gz #将内核配置文件保存于文件系统的/proc/config.gz
当内核运行时则可以将/proc/config.gz文件复制出来,并且解压得到此内核的.config配置文件
zcat /proc/config.gz > .config #解压命令
编译:
首先,内核镜像分为很多种
vmlinux 编译后形成镜像文件
zImage(vmlinuz) 在vmlinux的基础上使用gzip进行压缩所形成的小内核(不超过512KB)
bzImage(vmlinuz) 全称为bigzImage,同zImage一样原理,只是比zImage镜像大
uImage(vmlinuz) 为uBoot专用镜像,在zImage基础上再加上一个头形成uImage
以arm为目标板进行交叉编译内核常用的编译命令为:
# make -j4 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- uImage modules
//-j4 使用4个线程编译 ARCH=arm 目标为arm体系结构 CROSS_COMPILE 交叉编译器(我的为arm-linux-gnueabihf-) uImage 编译为uImage镜像 modules 同时也将配置中的模块进行编译
在编译过程中有时候会遇到一些错误,而这些错误只能够具体问题具体分析了。
编译完成后将所有编译的modules和firmware放入指定文件夹中:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules_install INSTALL_MOD_PATH=XXX
#此命令结束后会生成两个文件夹,fireware和modules,这两个文件夹之后应该放在lib目录下进行使用。
小提示:有些硬件不仅需要驱动,还需要所对应的firmware,而firmware是体系无关的文件(X86的也可以复制到arm下使用),需要下载其所对应的firmware放入到lib/firmware文件夹中。
到此配置和编译算是完成了,只需把编译好的镜像文件及模块放对位置就行了。
其他内容:
vmlinux,vmlinuz(zImage,bzImage,uImage)关系
vmlinuz是对vmlinux进行了相应压缩的内核镜像,而zImage,bzImage和uImage统称为vmlinuz。

zImage实际上就是将vmlinux使用gzip进行压缩,并在压缩之后的镜像前加个头,头里包括一段gzip解压缩代码,用于启动时自解压。
bzImage和zImage相同,不同的就是zImage会将内核解压到一个低端地址(内存中第一个640KB),而bzImage将内核解压到一个高端地址(大于1M)。
而uImage是uBoot专用的镜像文件,它是在zImage的基础上使用mkimage工具生成,其结果是在zImage上加个0x40 bytes的头,其包括:内核版本,创建时间,类型等
#uImage添加的头
Image Name: Linux 2.4.
Created: Mon Jun ::
Image Type: ARM Linux Kernel Image (gzip compressed)
Data Size: Bytes = kB = MB
Load Address: 0xc0008000
Entry Point: 0xc0008000
linux笔记 - 配置与编译的更多相关文章
- Linux 内核配置和编译
Linux 内核配置和编译 一.配置内核 (1). 为什么要配置内核 1. 硬件需求 2. 软件需求 选出需要的,去掉不要的 (2). 如何配置内核 1. make config 基于文本模式的交互 ...
- Linux内核配置、编译及Makefile简述
Hi,大家好!我是CrazyCatJack.最近在学习Linux内核的配置.编译及Makefile文件.今天总结一下学习成果,分享给大家^_^ 1.解压缩打补丁 首先是解压缩你获取到的Linux内核. ...
- [国嵌攻略][099][Linux内核配置与编译]
为什么要配置内核 基于硬件和软件的需求选出需要的功能,去掉不要的功能. 内核配置的方法 make config:基于文本交互的配置. make menuconfig:基于图形菜单的配置. make m ...
- linux内核配置与编译
配置内核:配置硬件和软件需的部分. make config:基于文本模式的交互式配置.(一问一答) make menuconfig:基于文本模式菜单性配置.(直观简单高效) <*>会产生b ...
- ORB-SLAM2(1) Linux下配置和编译
ORB-SLAM2 官网:https://github.com/raulmur/ORB_SLAM2 配置教程:http://blog.csdn.net/zzlyw/article/details/54 ...
- Linux下配置Objective-C编译环境
Ubuntu环境下Objective-C编译环境配置参考这里. CentOS环境下Objective-C编译环境配置参考这里. 还在继续探索中.
- 【课程分享】深入浅出嵌入式linux系统移植开发 (环境搭建、uboot的移植、嵌入式内核的配置与编译)
深入浅出嵌入式linux系统移植开发 (环境搭建.uboot的移植.嵌入式内核的配置与编译) 亲爱的网友,我这里有套课程想和大家分享,假设对这个课程有兴趣的,能够加我的QQ2059055336和我联系 ...
- linux内核源代码、配置与编译
内核源代码下载:www.kernel.org Linux内核源代码采用树形结构进行组织,非常合理地把功能相关的文件都放在同一个子目录下,使得程序更具可读性. linux内核代码最好不要在windows ...
- 【转载】Linux升级NTPD服务器-编译安装ntp-4.2.8p12与配置
[转载]Linux升级NTPD服务器-编译安装ntp-4.2.8p12与配置 1. 系统与软件版本 1.1 系统版本 rhel6.4(Red Hat Enterprise Linux Server r ...
随机推荐
- vue点击元素变色兄弟元素不变色
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- CSS总结div中的内容垂直居中的五种方法
一.行高(line-height)法 如果要垂直居中的只有一行或几个文字,那它的制作最为简单,只要让文字的行高和容器的高度相同即可,比如: p { height:30px; line-height:3 ...
- npm 走 privoxy 代理经常出现 shasum check failed 的解决办法
今天在下载一个比较大的项目,经常 shasum check failed ,太烦了,于是想切淘宝源,分别尝试 nrm 切换和传递 --registry ,结果都出现 Unexpected end of ...
- python之类与类之间的关系
在我们的世界中事物和事物之间总会有一些联系. 在面向对象中. 类和类之间也可以产生相关的关系 1. 依赖关系 执行某个动作的时候. 需要xxx来帮助你完成这个操作. 此时的关系是最轻的. 随时可以 ...
- 在vue中赋值的路径没有被编译
当我们跑起来的时候,f12会看到相对路径,但是此时会报错,说找不到图片,这时候有其中一个办法,直接 require进去. 这时候就可以成功显示图片,但是路径会不一样,因为编译出来. 至于如何props ...
- 微信小程序-01-项目组成文件介绍(入门篇)
自古开篇先说两句,写这些笔记不是学习用的,主要是后续分享一些遇到的坑,碰到过什么样的问题,怎么去解决,如果你不是一个很耐心无看文章的人,建议去 网易云课堂找一些课程,跟着别人的脚步或许会更有动力,我的 ...
- Fiddler抓包使用教程-乱码处理 Decode
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/73350344 本文出自[赵彦军的博客] 在 Fiddler 的工具栏中有一个 De ...
- Modo教程合集44部
Modo教程合集44部 教程说明:英文视频教程,大部分有工程文件,但不是全部 教程格式:Flv.MP4格式,大部分高清,确保能看清软件上的文字 发货方式:百度网盘下载链接(教程较多,可转存到自己的网盘 ...
- [20180713]关于hash join 测试中一个疑问.txt
[20180713]关于hash join 测试中一个疑问.txt --//上个星期做的测试,链接: http://blog.itpub.net/267265/viewspace-2157424/-- ...
- tkinter中button按钮控件(三)
button控件 简单的实现: import tkinter wuya = tkinter.Tk() wuya.title("wuya") wuya.geometry(" ...