linux内核配置、编译、移植

1、前言

Linux内核:3.14

目标板:Exynos4412-FS4412开发板

学习目标:从下载一个全新的Linux内核,并将linux内核经过配置、编译过后,移植到我们的目标版。

2、linux内核的配置

配置之前:首先领到我们的板子,首先要做的就是找到相关的资料、pdf、源码等等,领到那些资料以后,接下

来要做的就是直观重要的一步就是判定该linux是否支持我们的板子,这儿说的支持就是在构架和板子两方面都支持,判别方式如下:

linux3.14/arch目录下为构架

arch/arm/configs/以arm构架和本板子为例,在此目录下找到exynos_defconfig

这说明支持我们的板子linux公社,假如发觉不支持我们的板子,我们可以选择高版本的linux内核瞧瞧支持不支持,或则向订购板子的厂商要,再或则向公司朋友、组长、老板要,总会有解决的办法。

makemrproper

命令会删掉所有的之前编译生成文件、内核配置文件(.config文件)和各类备份文件,

所以几乎只在第一次执行内核编译前才用这条命令

注:

makeclean命令则是用于删掉大多数的编译生成文件,并且会保留内核的配置文件.config,

内核配置文件在哪个目录_内核配置文件_arm linux 内核 配置

还有足够的编译支持来构建扩充模块。所以你若只想删掉前一次编译过程的残留数据,

只需执行makeclean命令。

总而言之arm linux 内核 配置,makemrproper删掉的范围比makeclean大,

实际上,makemrproper在具体执行时第一步就是调用makeclean

更改linux-3.14目录下Makefile

ARCH=arm/*告诉make在编译的时侯去按照arm构架的配置去编译,默认X86*/

/*makeexynos_fs4412_config去arch/arm/configs/去找,不配置找不到*/

CROSS_COMPILE=arm-linux-

选择一个和开发板接近的编译配置

配置的模板在arch/arm/configs/下

cparch/arm/configs/exynos_defconfigarch/arm/configs/exynos_fs4412_defconfig

makeexynos_fs4412_config--->用exynos_fs4412_defconfig将.config覆盖掉

或则:cparch/arm/configs/exynos_fs4412_defconfig.config

执行配置命令(剪裁内核)

makemenuconfig

内核配置文件在哪个目录_内核配置文件_arm linux 内核 配置

makemenuconfig图形化界面,选择须要的功能,保存(也是保存到.config)

须要装sudoapt-getinstalllibncurse-dev

例如说打开网卡、NFS等驱动功能。---->内核比uboot编译简单

3、内核编译

注:

1、uboot-2013/tools目录下是为内核等提供的一些工具命令。

编译内核时就用到mkimage命令(生成镜像文件)

2、拷贝到linux-3.14/usr/bin让make能找到命令

makeuImage-j4(四核:选4双核:选8-->最多8)

----->mkimagenotfound--->见里面的注释

(编译,u代表uboot启动zImage其他启动)

找一个和板子相仿的设备树【描述真实化学硬件--使用硬件必须添加进来】

arch/arm/boot/dts设备树目录(板子的设备树)-->【描述板子上有什么真实的数学硬件设备】

cparch/arm/boot/dts/exynos4412-origen.dtsarch/arm/boot/dts/exynos4412-fs4412.dts

viarch/arm/boot/dts/Makefile

exynos4412-origen.dtb---->exynos4412-fs4412.dtb

cdlinux-3.14

makedtbs(编译arch/arm/boot/dts/所有的设备树)

cparch/arm/boot/uImage~/tftp

cparch/arm/boot/dts/exynos4412-fs4412.dtb~/tftp

下载---->现象:启动时停在某处

在板子上设置以下环境变量:(根文件系统通过nfs以挂载好)

setenvbootcmdtftp41000000uImage;tftp42000000exynos4412-fs4412.dtb;

bootm41000000-42000000

save

下载完成以后:

提示信息:cannotopenroot"nfs"fsrootnotmount(挂载根文件系统)

1、内核中的的nfs(顾客端)没有打开?

---->

makemenuconfig

/NFS查找相关NFS_Client的内容打开保存编译

Filesystems-->NetworkFileSystem-->NFSclientsupport(Y)

------>下载以后:仍然不行

2、内核中网路功能没开启?没配置?

--->NetworkingSupport-->Networkingoptions--->

打开IP:kernellevelautoconfiguration(从Uboot获取IPserverip)

Filesystems-->NetworkFileSystem-->

NFSclientsupport--->Y

--->RootfilesystemonNFS(Y)

---->仍然停在那!

注意:ubootkernel是两个不同的软件,独立的,kernel讨厌uboot会从头开始初始化

3.网卡没打开?

makemenuconfig---->搜索dm9000--->打开

DeviceDrivers-->Networkdevicesupport--->Ethernetdriversupport

现象:--->仍然有问题

4、设备树中是否真的添加了dm9000硬件设备?

viarch/arm/boot/dts/exynos4412-fs4412.dts观察是否有dm9000的节点?---->并没有

---->如今我们来添加这个节点,是不是有点犯蒙呢?如何添加呢?

---->还好内核给我们提供了一些案例,用来改一改

linux-3.14/Documentation/devicetree/bindings/net/davicom-dm9000.txt

注:linux-3.14/Documentation下有soc上的内容在arm/,也有外部的net/

ethernet@18000000{

compatible="davicom,dm9000";

reg=;//IndexADDR、Index厚度、DATAADDR、长度

interrupt-parent=;//DM9000中断引脚接到哪里按照头文件往上追gpx0的定义

interrupts=;//6-->22号中断4gic.txt

local-mac-address=[0000deadbeef];

davicom,no-eeprom;

};

---->将里面的节点添加到设备树中,再度下载arm linux 内核 配置,总算见到了阳光!觉得生命又有了色调!

4、至此linux伊甸园论坛,我们的内核早已编译和移植完毕,在我们的板子上早已完全可以使用啦!

本文原创地址:https://www.linuxprobe.com/lnhpzbyyznhd.html编辑:刘遄,审核员:暂无