ZYNQ7000(AX7020)移植Linux操作系统(三):内核的编译
⼀、Linux内核介绍
Linux是⼀个⾃由的、免费的,源码开放的操作系统。⼀些⼚商将Linux系统内核与应⽤程序个⽂档包装起来,并提供⼀些安装界⾯和系统设定管理⼯具的⼀个软件包的集合,例如RedHat,Debian、Ubuntu、Novell/SuSE等。Ubuntu版本号由该次发布的年份和⽉份组成,半年发布⼀次。⾸次发布是在2004年10⽉,因此该版本为4.10。于2009年4⽉23发布,因此该版本号为9.04。RedHat操作系统更多的应⽤于服务器,⽽Ubuntu操作系统更多应⽤于个⼈电脑。
Linux内核是⼀个Linux操作系统的核⼼,如下图所⽰,Linux内核只是Linux操作系统⼀部分。对下,它管理系统的所有硬件设备;对上,它通过系统调⽤,向Library Routine(例如C库)或者其他应⽤程序提供接⼝。
⼆、Linux内核源代码的⽬录结构
Linux内核源代码包括三个主要部分:
1、内核核⼼代码,包括各个⼦系统和⼦模块,以及其他的⽀撑⼦系统,例如电源管理、Linux初始化等。
2、其他核⼼代码,例如库⽂件(因为Linux内核是⼀个⾃包含的内核,即内核不依赖其他的任何软件,⾃⼰就可以编译通过)、固件集合、KVM(虚拟机技术)等。
3、编译脚本、配置⽂档、帮助⽂档、版权说明等辅助性⽂件。
include/------ 内核头⽂件,需要提供给外部模块使⽤
kernel/------- Linux内核的核⼼代码,包含了进程调度⼦系统,以及和进程调度相关的模块。
mm/---------- 内存管理系统
fs/------------ VFS⼦系统
net/---------- 不包括⽹络设备驱动的⽹络⼦系统海会主机
ipc/---------- IPC进程间通信⼦系统
arch/-------- 体系结构相关的代码,例如 arm x86等等。
arch//mach 具体的machine/board相关的代码
arch//include/asm 体系结构相关的头⽂件
arch//boot/dts 设备树⽂件
init/--------- Linux系统启动初始化相关的代码
block/------ 提供块设备的层次
sound/----- ⾳频相关的驱动及⼦系统,可以看作“⾳频⼦系统”。
drivers/----- 设备驱动
Lib/---------- 实现需要在内核中使⽤的库函数,例如 CRC、FIFO、list、MD5等。
crypto/ ----- 加密、解密相兰的库凼数。
security/ ---- 提供安全特性(SELinux)。
virt/ ---- 提供虚拟机技术(KVM 等)的⽀持。
linux操作系统镜像usr/ ---- ⽤亍⽣成 initramfs 的代码。
firmware/ ---- 保存⽤于驱动第三⽅设备的固件。
samples/ ---- ⼀些⽰例代码。
tools/ ---- ⼀些常⽤⼯具,如性能刨析、⾃测试等。
Kconfig, Kbuild, Makefile, scripts/ ---- ⽤于内核编译的配置⽂件、脚本等。flash做游戏
开发平台 u-boot 跑起来后,想进⼊ Linux,则需要三⼤法宝:
Linux image(uImag or zImag)
Device tree image
⽂件系统(Linux app 都是存储在⽂件系统⾥的)
下⾯会介绍如何产⽣这三个⽂件。
三、Linux内核源码编译
web前端框架有哪些及其作用下载内核的压缩包 , 解压缩 , 然后定位到交叉编译器⽬录 , 编译后产⽣uImag 镜像⽂件 。
四、设备树Device tree的编译
FDT(扁平化设备树)是⼀种描述硬件的数据结构,ARM Linux3.0以后⼤多数硬件设备直接通过FDT传递给Linux,⽽不需要plat-xxx和mach-xxx⼤量冗余的代码。
设备树的描述在.dts ⽂件(device tree source)⾥,它是⼀种 ASCII ⽂本格式,此⽂本格式⾮常⼈性化,适合⼈类的阅读习惯。基本上,在ARM Linux 在,⼀个.dts ⽂件对应⼀个 ARM的machine,⼀般放置在内核的arch/arm/boot/dts/⽬录。在此⽬录下我们可以看到我们开
serializable接口 敏感信息发板的设备树 AX7010.dts(AX7020 开发板为 AX7020.dts)。
下⾯我们对.dts 设备树⽂件 迕⾏编译⽣成.dtb 格的设备树⽂件。编译前必须下载安装设备树编译器⼯具,因为我们已经在前⾯ u-boot 的编译的时候安装了设备树编译器。
五、⽂件系统
有了 Image/uImage, 和 devicetree.dtb,最后还需要⽂件系统。Linux 内核启动阶段,
待所有的驱动和外设都初始化好了以后,最后要加载⼀种⽂件系统(基于flash 的jffs2 或者基
于RAM 的ramdisk 或者基于⽹络的NFS 等等),Linux 才可以正常启动。(我们在进⾏ Linux应⽤程序开发式时,会编写 Linux app,然后编译,执⾏;编译出来的 Linux app 就是放在⽂件系统某个⽬录如:/home/root 下,然后进⼊/home/root 去执⾏;)
ZYNQ7000 开发平台⽀持三种类型⽂件系统:
1. ubuntu ⽂件系统,我们实验中使⽤的⽂件系统为:
2. 基于 RAM 的⽂件系统
3. 基于 NFS 的⽹络⽂件系统(NFS ⽂件系统⼀直是调试 Linux app 最佳⽅法,AX7010/AX7020 开发平台 Linux kernel image 默
认提供此项功能)
返⾥我们把 ubuntu的⽂件系统
拷贝到 Ubuntu 操作系统的 Downloads ⽬录下:
汽车safe是什么意思到此为⽌,我们的Linux 的内核镜像⽂件、设备树⽂件和操作系统⽂件系统都准备好了,
接下去我们就是准备 Linux 操作系统在 AX7010/AX7020 开发板上运⾏了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论