系统Arm架构下的Linux操作系统实践arm平台linux

Linux是一个优秀的多用户、多任务操作系统,具有多平台、多架构、开源等特点。
Arm架构下的Linux操作系统广泛应用于各种嵌入式设备中。
最常用的Linux内核版本是2.6、3.4和4.4。
Linux内核将不断完善,为ARM架构提供多项优化,以满足各种嵌入式应用的需求,让系统有更好的表现。
下面根据系统Arm架构下Linux操作系统的做法进行讲解。
首先,对于全身移植来说,实践的关键是准备移植的细胞核。
由于Linux内核被打包在可执行文件中,因此必须从Linux内核编译uImage。
uImage将包含目标系统正确启动目标系统所需的模块、驱动程序和Linux内核。
内核编译后要使用kernel命令烧录到目标平台,例如://编译内核makezImage//配置内核makemenuconfig//烧录内核kernel-puImage如上所示,可以通过Linux内核工具完成系统移植和编译器。
其次,对于Linux操作系统的深度优化,主要是在内核层面进行优化,比如内核空间压缩。
比较常见的压缩方法包括用户空间压缩和内核空间压缩。
版本发布时可以进行用户空间压缩。
基本流程是通过makemenuconfig进行配置,取消或更改不再使用的功能,从而压缩核心大小可以动态或静态实现,通过使用“gcc-m16”强制生成16位指令来减少长度的系统指令。
最后,在实践中,重点是系统驱动程序的开发和调试,包括但不限于设备驱动程序、存储驱动程序、文件系统驱动程序等。
工作前需要做好基本的调试准备,常见的方法有:改变内核启动参数,将其编辑为详细参数,以便系统在启动时可以输出一些信息;以调试模式编译内核,可以将一些运行时状态输出到控制台,对于内核中的一些条件中断,可以使用Oprofile等工具来查看内核正在等待的进程的运行时状态。
总之,Arm架构下的Linux操作系统有很多优点。
易于移植、优化和调试,为嵌入式开发人员提供稳定可靠的开发环境。

i.MX6ULL嵌入式Linux开发3-Kernel移植

本文讲解了Linux内核移植的过程。
Linux内核的基本介绍可以从网站(kernel.org/)获得。
NXP从官方Linux内核网站下载特定版本,然后传输到其CPU上。
开发人员下载NXP提供的Linux源代码,并转移到自己的操作需求。
本文使用NXP提供的Linux源代码。
接下来,必须在Ubuntu操作系统上安装特定的库,例如lzop和ncurses库,以支持内核编译。
在Ubuntu环境中创建一个文件夹,将Linux内核下载包放入其中并解压。
解压完成后,他们通过创建一个名为build.sh的新脚本文件来执行编译过程。
在脚本中输入相应的命令即可显示脚本的可执行权限,并自动启动编译过程。
编译好的Linux内核会生成一个zImage文件,它是Linux镜像文件。
同时会生成arch/arm/boot/dts下的多个文件。
vmlinux、image、zImage和uImage的区别在于,vmlinux是编译生成的原始内核文件,zImage是gzip压缩的镜像文件,uImage是旧版本uboot专用的镜像文件,较少使用。
现在Linux内核编译过程中会生成一系列文件,具体结构如下。
编译完成后,会在arch/arm/boot目录下生成zImage文件,同时在arch/arm/boot/dts目录下会生成多个.dtb文件。
然后将zImage和imx6ull-14x14-evk.dtb复制到Ubuntu的tftp目录下,通过uboottftp上传到开发板。
在uboot中设置bootargs环境变量后,通过命令将zImage和imx6ull-14x14-evk.dtb下载到开发板并启动。
如果根系统文件丢失,启动过程就会出错,我们需要在bootargs中指定根系统文件的路径。
如果没有定义或者路径设置不正确,Linux内核启动后就会显示类似的错误信息,最终导致内核崩溃。
为了进一步了解Linux内核,可以参考官方开发板设置,将自己的开发板添加到Linux内核中。
这包括复制imx_v7_mfg_defconfig文件的副本并将其重命名为您的开发板的名称;复制文件imx6ull-14x14-evk.dts并将其重命名为imx6ull-myboard.dts;修改Makefile,添加对新树设备表的引用;

linux内核-4-rootfs构建移植

在嵌入式Linux中,根文件系统(rootfs)起着至关重要的作用,它是内核启动后安装的第一个文件系统,包含初始化的脚本和服务。
虽然计算机上的Ubuntu内核映像通常存储在/boot/vmlinuz中,但嵌入式系统通常将内核代码保存在专用NANDFlash或EMMC分区中,而不是rootfs中。
根文件系统和内核是独立的,没有根文件系统,内核将无法正常运行,并且会显示Kernelpanic错误。

根文件系统主要由以下目录组成:

/bin:存放系统必需的可执行命令,如ls、cp、mv等。
/dev:包含设备节点文件。
/etc:存放配置文件。
/lib:存放Linux所需的库文件,并与命令和应用程序共享。
/mnt:临时安装目录,用于连接外部存储。
/proc:虚拟文件系统,提供设备信息和打印输出。
/usr:Unix的软件资源目录。
/var:存储可变数据,例如日志文件。
/sys:sysfs文件系统挂载点,用于管理内核数据结构信息。

创建根文件系统时,常用的是BusyBox,里面包含了多种Linux命令。
首先从源码上编译配置BusyBox,比如修改为支持中文加密,然后配置编译选项,避免静态编译带来的DNS问题。
构建完成后,将/lib、/usr/lib等必要的库文件添加到rootfs中,并创建dev、proc、mnt、sys、tmp、root等目录。
测试时,可以使用NFS挂载rootfs,并通过设置bootargs来设置安装参数。
最后添加rcS、fstab、inittab、resolv.conf等配置文件,确保系统和网络启动设置正常。