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,
还有足够的编译支持来构建扩充模块。所以你若只想删掉前一次编译过程的残留数据,
只需执行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
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伊甸园论坛,我们的内核早已编译和移植完毕,在我们的板子上早已完全可以使用啦!
本文原创地址://q13zd.cn/lnhpzbyyznhd.html编辑:刘遄,审核员:暂无