嵌入式系统移植流程
1、环境说明
虚拟机上将Linux系统移植到S3C2440的TQ2440开发板上,软件平台为Ubuntu14.0下的交叉编译环境。
2、任务流程
1、虚拟机安装
2、虚拟机上安装ubuntu系统
3、建立交叉编译环境
4、Uboot移植
5、操作系统内核移植
6、文件系统制做
3、移植准备
首先在电脑上下载VMware,根据提示直接安装,然后下载Ubuntu的镜像文件,在VMware中新建虚拟机,安装程序光盘中映像文件(iso),根据提示一步步安装,配置空间大小,网络连接,I/0控制器类型等等,最后就可以在VMware环境中运行Ubuntu系统。
随后,在Ubuntu系统中安装交叉编译环境,用天嵌给的交叉编译文件,在Ubuntu系统下解压文件,配置环境,显示下图表示交叉编译环境搭建完成。
图1、交叉编译环境搭建完成
3、uboot移植
3.1、Bootloader简介
嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。在一个基于ARM7TDMI core的嵌入式系统中,系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。Uboot是就是一种功能强大的bootloader。
3.2、Uboot移植流程
(1) 在board下新建一个目录embedsky,将sansung/smdk2410目录复制到embedsky目录下,并将文件夹改成smdk2440。
(2) 将smdk2440/smdk2410.c改名为smdk2440.c。
(3) 在include/configs目录下,将smdk2410.h复制为smdk2440.h。
(4) 修改顶层的makefile文件在在1880行加入自己的处理器信息。
(5) 修改board/embedsky/smdk2440下的Makefile文件,将COBJS:=smdk2410.o flash.o改为smdk2440.olash.o。
(6) 修改/cpu/arm920t/start.S文件,使u-boot可以从NandFlash启动。
(7) 在board/smdk2440/目录下加入NandFlash读取函数。
(8) 修改board/smdk2440/lowlevel-init.S文件。
(9) 修改include/configs/smdk2440.h如下。
上述修改完后,就直接make,得到u-boot.bin烧到Nand Flash即可。
图2、uboot.bin文件生成
4、内核移植
4.1、内核移植简介
Linux内核高效稳定,易于定制,具有完善的网络通信和文件管理机制,优秀的开发工具等优点,使得Linux成为计算机领域,特别是嵌入式系统领域里的新宠.在诸如工业控制、PDA、智能手机等领域都有一定程度的应用.然而,在嵌入式领域中,硬件的体系结构多种多样,种类繁多。
4.2、Kernel移植
Linux kernel的配置体系由三部分构成,分别是:
Makefile:分布在 Linux 内核源代码根目录及各层目录中,定义Linux kernel的编译规则,依据.config中定义的CONFIG_xxxx=xxxxx确定xxx以何种方式编译进kernel。
Kconfig:配置选项的文件,各个子目录下的Kconfig定义了子目录的功能模块的配置选项。
配置工具:配置命令解释器(对配置脚本中使用的配置命令进行解释)和配置用户界面(提供基于字符界面、基于Ncurses 图形界面以及基于Xwindows图形界面的用户配置界面,各自对应于make config、make menuconfig和make xconfig)。通过对配置工具选项进行配置后生成配置文件.config,.config文件决定Kconfig中的配置项是否编译进入kernel。
图3、Kconfig配置项
编译配置好的内核,即可生成内核镜像文件zImage。
5、文件系统
5.1、嵌入式文件系统
嵌入式文件系统(Embedded file system)是指嵌入式系统中实现文件存取、管理等功能的模块,提供一系列文件输入输出等文件管理功能,为嵌入式系统和设备提供文件系统支持。在嵌入式系统中,应用程序通常需要对信息进行存取操作,当任务运行的时候,任务可以在其任务堆栈中存放少量信息,但是存储量要受到内存空间的严格限制,而且在内存空间中的信息随着任务的退出而消失,不适于存放要长期保存的信息。
“在Linux系统中一切皆是文件”这句话是我们学习Linux系统的时候常常听到的一句话。虽然有些夸张,但是它揭示了文件系统对于Linux系统的重要性;实际上文件系统对于所有的操作系统都很重要,因为它们把大部分的硬件设备和软件数据以文件的形式进行管理。
5.2、文件系统制作
制作文件系统,首先需要用busybox编译出文件系统所需的应用程序,然后再做文件系统。先获取BusyBox源码、解压、修改并配置BusyBox。配置过程先修改makefile文件中编译器,使用arm-Linux,然后make menuconfig进入配置单,配置完成编译安装BusyBox。完成编译后会生成“bin”、“sbin”、“usr”目录和“linuxrc”。将其放入自己新建的一个文件目录中,然后新建“dev”、“etc”、“home”、“lib”、“mnt”、“opt”、“proc”、“root”、“sddisk”、“sys”、“tmp”、“udisk”、“var”、和“web”目录,同时在原有的“usr”目录下面新建一个“lib”和“share”目录。然后在文件中添加内容。
图4、BusyBox配置单
然后使用制作yaffs文件系统的软件,它做出的yaffs文件系统格式的镜像就可以使用了,操作指令#mkyaffsimage_2 文件名 镜像文件名。其中mayaffsimage_2软件在交叉编译中就提供了,安装交叉编译器同时也安装了它。