linux内核的移植
- 格式:docx
- 大小:653.80 KB
- 文档页数:11
嵌入式Linux在SH4架构下的移植技术研究作者:王若关胜晓刁智华来源:《现代电子技术》2008年第24期摘要:SuperH系列微处理器是Renesas公司(原Hitachi)开发的采用了RISC系统指令集的32位系列微处理器。
详细介绍SH4系列交叉编译平台在新版本编译器下的配置过程,提出一种适用于SuperH系列微处理器的通用的内核移植的方法并研究Linux 2.6内核在SH4系列微处理器SH7751上的移植方案。
实验证明该方法可行,移植过程也对其他平台有借鉴作用。
关键词:SuperH;Linux2.6;嵌入式系统;内核移植中图分类号:TN21;TP311文献标识码:A文章编号:1004-373X(2008)24-058-03Research of Porting Embedded Linux Based on SH4WANG Ruo,GUAN Shengxiao,DIAO Zhihua(USTC-Renesas Joint Library,University of Science and Technology ofChina,Hefei,230026,China)Abstract: SuperH is a series of 32bit RISC MPU production of Renesas Company.The paper provides a method of porting embedded Linux kernel 2.6 to SH7751 and introduces the way of establishing crosstool in SH4 series MPU.The result proves it viable and helpful to other architecture of MPUs.And the migration process is also helpful to the other platform.The paper presents a common core transplant method applicable to series of SuperH microprocessor.Keywords:SuperH;Linux2.6;embedded system;core transplant1 引言Renesas公司的SuperH系列微处理器是由原Hitachi公司设计开发,由SuperH公司提供CPU技术支持。
嵌入式linux(贺丹丹等编著)课后习题答案第八章一、填空题。
1、ARM-Linux内核的配置系统由三个部分组成,它们分别是Makefile、配置文件和配置工具。
2、配置工具一般包括配置命令解释器和配置用户界面,前者主要作用是对配置脚本中使用的配置命令进行解释;而后者则是提供基于字符界面、基于Ncurses图形界面以及基于X Window图形界面的用户配置界面。
3、Makefile文件主要包含注释、编译目标定义和适配段。
4、Linux内核常用的配置命令有make oldconfig、make config、make menuconfig和make xconfig。
其中以字符界面配置的命令是make config。
5、内核编译结束后,会在“/arch/arm/boot/”目录下面和根目录下面生成一个名为zImage的内核镜像文件。
二、选择题C AD D B三、叙述题1、Linux内核各个部分与内核源码的各个目录都是对应起来的,比如有关驱动的内容,内核中就都组织到“drive”这个目录中去,有关网络的代码都集中组织到“net”中。
当然,这里有的目录是包含多个部分的内容。
具体各个目录的内容组成如下:arch:arch目录包括了所有和体系结构相关的核心代码。
include:include 目录包括编译核心所需要的大部分头文件,例如与平台无关的头文件在include/linux 子目录下;init:init 目录包含核心的初始化代码(不是系统的引导代码),有main.c 和Version.c 两个文件;mm:mm 目录包含了所有的内存管理代码。
与具体硬件体系结构相关的内存管理代码位于arch/*/mm 目录下;drivers:drivers 目录中是系统中所有的设备驱动程序。
它又进一步划分成几类设备驱动,每一种有对应的子目录,如声卡的驱动对应于drivers/sound;ipc:ipc 目录包含了核心进程间的通信代码;modules:modules 目录存放了已建好的、可动态加载的模块;fs:fs 目录存放Linux 支持的文件系统代码。
linux26221的在s3c2410板子上的移植----------------------------------------------bootloader编译环境:vivi版本:0.1.4交叉编译器(CROSS-COMPILE)版本:2.95.3(下载地址略:网上专门多搜下。
)操作系统:redhat server 5======================================linux内核编译环境:内核版本:linux2.6.22.2交叉编译器:自己做的适合Linux2.6.22.2版本的交叉编译器操作系统:redhat server 5======================================文件系统编译环境:busybox1.5.1,或1.4.2交叉编译器(CROSS-COMPILE)版本:同上操作系统:redhat server 5----------------------------------------------硬件:自己做的2410开发板内存:64MB SDRAM(2×16M×16位);CPU:S3C2410 ARM处理器,Nor Flash:2MB的Nor Flash,用于固化测试程序(用来下载bootloader,内核,或文件系统);NANDflash: 64MB的Nand Flash,用于储备Bootloader、Linux内核及文件系统、应用程序和数据;++++++++++++++++++++++++++++++++++++++++++++++====================================================================== ============================一:编译环境搭建====================================================================== ============================一:搭建交叉编译环境讲明:由于编译交叉编译环境比较繁琐,建议大伙儿用差不多编译好的交叉编译环境。
linux 系统迁移方案摘要:一、引言1.迁移背景2.迁移目的二、迁移准备工作1.了解目标系统架构2.数据备份与恢复3.软件兼容性检查三、迁移实施步骤1.系统镜像制作与部署2.网络配置与资源共享3.用户与权限设置4.系统配置与优化5.应用软件安装与测试四、迁移过程中可能遇到的问题及解决方案1.硬件兼容性问题2.驱动程序缺失3.系统稳定性问题4.性能优化五、迁移后的维护与监控1.系统安全防护2.数据备份策略3.性能监控与调整4.用户反馈与支持六、总结与展望1.迁移成果评估2.迁移经验的总结3.未来系统迁移规划正文:一、引言随着科技的不断发展,Linux系统在各个领域得到了广泛的应用。
在这个背景下,越来越多的企业开始考虑将原有的系统迁移至Linux平台,以提高系统稳定性、安全性和降低运维成本。
本文将详细介绍一套完整的Linux系统迁移方案,帮助企业和开发者顺利实现迁移目标。
1.迁移背景在企业级应用中,Linux系统凭借其高度可定制性、开源优势和良好的性能,逐渐成为替代传统封闭式操作系统的主流选择。
迁移背景主要包括:(1)原有系统存在安全隐患,需要提高安全性;(2)降低操作系统授权成本;(3)统一系统架构,提高运维效率;(4)满足业务发展需求,提高系统性能。
2.迁移目的本次迁移的主要目的包括:(1)提高系统安全性,降低安全风险;(2)优化系统性能,提高资源利用率;(3)降低运维成本,提高运维效率;(4)实现软硬件平台的统一,便于管理。
二、迁移准备工作在进行Linux系统迁移之前,需要做好以下准备工作:1.了解目标系统架构充分了解目标系统的硬件架构、网络拓扑、软件环境等,以便为后续迁移提供依据。
2.数据备份与恢复在迁移过程中,为确保数据安全,需要对原有系统进行数据备份。
备份完成后,对新系统进行数据恢复,验证数据完整性和准确性。
3.软件兼容性检查检查目标系统中的软件是否与原有系统相同,如有差异,需提前准备相应的替代品或升级方案。
linux下bluez的移植~bluez的移植可以用两个字概括:麻烦!原因是它不是单纯的bluez的编译,它还需要其他很多的库的支持,下面先列举一下这些库的麻烦依赖关系吧:bluez-libs-3.36(不需要其他库)bluez-utils-3.36:glib-2.16.5dbus-1.0.2:libxml2-2.7.4libsndfile-1.0.17libusb-0.1.12前面两个必须的,后两个看你的配置,bluez4也一样;下面开始编译:Bluez移植到arm s3c2410上搞了好几天的蓝牙协议栈(bluez)的移植,现在终于有点小成就了,写下来和大家分享。
以下介绍Bluez移植的基本步骤。
一,linux内核的配置Linux 2.6版本之后的内核一般都有蓝牙模块的配置,所以你不用再打补丁了。
由于我也是处于摸索阶段,所以我暂时用的是开发板上自带的内核。
#tar zxvf linux.2.6.*解压缩内核,进入内核目录。
在名令行输入# make disclean/make clean/make rmproper,选择这三个中的任意一个对内核进行清理,关于这三个命令的区别你可以google一下,然后自己去区分。
#make menuconfig/make config /make oldconfig /make xconfig输入如这三个命令中的任何一个,对内核进配置,这几条命令的区别,请你自己google。
推荐使用make menuconfig 。
进入内核配置界面之后,根据你的自己的需要进行选择。
关于内核的配置请单独查看内核配置方面的文档。
#make zImage ARCH=arm CROSS_COMPILE=arm-linux-到此内核镜像就已经做好了。
二,编译bluez协议栈。
移植过蓝牙协议栈的人,肯定会觉得,Bluez协议栈的编译是最麻烦的一件事情。
其实,如果你能理清楚bluez-utils所依赖的一些库,你就能很快的cross-compile交叉编译出一套能在开发板上跑起来的程序。
第36卷第4期湖南理工学院学报(自然科学版)V ol. 36 No. 4 2023年12月 Journal of Hunan Institute of Science and Technology (Natural Sciences) Dec. 2023基于WSL 2子系统的嵌入式Linux操作系统移植方法王明菱, 刘测产, 张小春, 徐绯然(西昌卫星发射中心, 四川西昌 615000)摘要: 提出一种基于WSL 2子系统的嵌入式Linux操作系统移植方法. 该方法在Windows操作系统下搭建WSL 2子系统, 并安装Ubuntu 22.04操作系统, 用于嵌入式软件开发和交叉编译, 能极大提高计算机资源的利用效率. 同时, 采用QEMU开源虚拟化软件模拟各类硬件平台, 对裁剪后的操作系统、板级驱动和应用程序进行跨平台移植和快速验证, 有利于缩短产品开发周期, 提高研发效率.关键词:WSL; Ubuntu; QEMU; Linux; 系统移植中图分类号: TP316.8 文献标识码: A 文章编号: 1672-5298(2023)04-0024-06Transplantation Method of Embedded Linux OperatingSystem Based on WSL 2 SubsystemWANG Mingling, LIU Cechan, ZHANG Xiaochun, XU Feiran(Xichang Satellite Launch Center, Xichang 615000, China)Abstract: This paper puts forward a transplantation method of embedded Linux operating system based on WSL 2 subsystem. In this method, WSL2 subsystem is built under Windows operating system and Ubuntu 22.04 operating system is installed for embedded software development and cross-compilation, which can greatly improve the utilization efficiency of computer resources. At the same time, QEMU open source virtualization software is used to simulate various hardware platforms, cross-platform transplantation and rapid verification of the tailored operating system, board drivers and applications, which is conducive to shortening product development cycle and improving research and development efficiency.Key words: WSL; Ubuntu; QEMU; Linux; system transplantation0 引言现代嵌入式软硬件开发通常需要在特定的硬件平台上进行. 不同厂商和品牌的硬件板卡之间往往不兼容, 导致操作系统和软件移植困难, 硬件适配性差. 此外, 为了方便编写和修改开发过程中产生的大量软件工程化文档, 许多嵌入式软件开发者选择使用Windows操作系统. 因此他们通常需要在虚拟机平台(如VMware或VirtualBox)下进行交叉编译, 不仅工作效率低下, 而且难以维护. 为了解决上述问题, 本文提出了一种新的开发调试方法. 该方法在Windows操作系统下搭建WSL 2子系统, 并安装Ubuntu 22.04操作系统用于嵌入式软件开发和交叉编译, 同时采用QEMU开源虚拟化软件模拟各类硬件平台, 对裁剪后的操作系统、板级驱动和应用程序进行跨平台移植和快速验证, 有利于提高研发效率.1 仿真环境搭建QEMU是一款被广泛使用的开源仿真软件, 支持仿真嵌入式系统中的CPU、I/O、内存及其他硬件设备源, 被测软件可以完全摆脱对硬件资源的依赖, 为软件的调试运行、故障定位提供便利条件[1]. 与VMware Station相比, QEMU能够模拟一系列嵌入式开发板, 包括ARM、MIPS、RISC-V等不同架构. 模拟的开发板支持各种外设, 如串口、LCD、网卡、USB、SD卡等, 能够在模拟开发板上运行U-boot、Linux收稿日期: 2022-08-17作者简介: 王明菱, 男, 本科, 工程师. 主要研究方向: 嵌入式系统设计第4期王明菱, 等: 基于WSL 2子系统的嵌入式Linux操作系统移植方法 25和Rootfs. 对于没有实物开发板的使用者来说, 通过QEMU搭建虚拟开发板不仅方便快捷, 而且经济实用, 是学习嵌入式系统和研究U-boot、Linux内核的理想选择. 操作系统环境为Windows 11、WSL 2、Ubuntu 22.04子系统; QEMU版本为6.2.0; 交叉编译工具链版本为11.4.0; Linux内核版本为5.10.186; BusyBox版本为1.36.1.1.1 WSL子系统迁移在应用商城安装好Ubuntu 22.04子系统后, 该系统默认安装在C盘, 可能造成C盘空间紧张, 于是将其迁移至其他空闲分区.使用管理员身份打开powershell, 输入命令“wsl -l -v”查看WSL 2发行版本. 命令显示结果如图1所示, 不同环境下NAME可能会有所不同.图1 WSL子系统状态显示输入命令“wsl --shutdown”, 关闭WSL的Linux发行版.输入命令“wsl --export Ubuntu D:\ubuntu.tar”, 将操作系统导出到D盘.输入命令“wsl --unregister Ubuntu”, 注销原Linux发行版.在D盘的根目录下新建“D:\wsl”文件夹, 用于存放新的Ubuntu发行版, 然后使用命令“wsl --import Ubuntu D:\wsl\Ubuntu D:\ubuntu.tar --version 2”, 将“D:\ubuntu. tar”导入到“D:\wsl”文件夹下.导入成功后, 输入指令“Ubuntu config --default-user ubuntu”, 修复默认登陆用户, 其中最后的“ubuntu”可改为自己的用户名.1.2 配置安装交叉编译环境安装x86-arm交叉编译器gcc和g++以及其他配套支持软件,并检验交叉编译器安装是否成功, 可输入指令“arm-linux-gnueabi-gcc-v”. 若出现如图2所示的提示, 则说明交叉编译器安装成功.图2 交叉编译环境搭建成功提示安装QEMU开源仿真软件及其配套依赖并检验QEMU是否安装成功, 可输入指令“qemu-system-arm --version”. 若出现如图3所示的提示, 则说明QEMU安装成功.图3 QEMU安装成功提示2 Linux内核编译Linux 是全面的多任务操作系统, 能支持X86、ARM、MIPS、ALPHA、SPARC等多种不同的体系结构, 其高效性和稳定性已经在各个领域尤其是在网络服务器领域得到了验证, 而且Linux 内核小巧灵活, 易于裁剪[2].26 湖南理工学院学报(自然科学版) 第36卷Linux内核是Linux操作系统的核心代码, 负责与硬件进行交互, 并实现资源调度、内存管理、存储管理、进程管理、文件系统、设备驱动、网络通信和系统调用等功能.接下来介绍如何下载、编译Linux内核源码, 并将其移植到QEMU虚拟开发板上, 以实现运行.在官方网站“”上获取Linux内核源码, 解压并编译.wget https:///pub/linux/kernel/v5.x/linux-5.10.186.tar.xztar -xvf linux-5.10.186.tar.xzcd linux-5.10.191make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- vexpress_defconfimake ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j12make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- LOADADDR=0x60003000 uImage -j12 输入以下指令, 尝试运行QEMU加载Linux内核.qemu-system-arm -M vexpress-a9 \-m 512M \-kernel arch/arm/boot/zImage \-dtb arch/arm/boot/dts/vexpress-v2p-ca9.dtb \-nographi若出现如图4所示的提示界面, 则说明内核已经成功运行, 但文件系统尚未挂载.图4 内核运行提示界面3 建立根文件系统并挂载根文件系统是内核启动时挂载的第一个文件系统, 内核代码映像文件就保存在根文件系统中. 系统引导启动程序会在挂载根文件系统后, 从中加载一些基本的初始化脚本和服务到内存中运行[3].3.1 建立根文件系统根文件系统的制作方法有很多, 如Buildroot、BusyBox等, 本文采用安装过程最为简单的轻量级根文件系统制作工具BusyBox.从官方网站“”下载、解压并编译BusyBox源码.wget https:///downloads/busybox-1.36.1.tar.bz2tar -xvf busybox-1.36.1.tar.bz2cd busybox-1.36.1make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- menuconfigmake ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j12make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-编译过程中会出现Configuration界面, 需要将“Settings->Build Options->Build static binary”选上, 如图5所示.BusyBox默认将根文件系统放在_install文件夹下, 此时构建的根文件系统仅仅是一系列支撑Linux 操作系统基本运行的可执行文件, 若想将根文件系统挂载起来, 还需要手动生成脚本文件、配置文件、设备节点和动态链接库.第4期王明菱, 等: 基于WSL 2子系统的嵌入式Linux操作系统移植方法 27在“_install”文件夹下创建“dev/tty1” “dev/tty2” “dev/tty3” “dev/tty4” “dev/console” “dev/null”等设备节点,建立动态链接库, 同时创建初始化脚本“etc/init.d/rcS”, 并在rcS中填入环境变量导出、初始节点挂载、临时路径创建等初始化相关内容.图5 界面选项创建自动挂载配置文件“etc/fstab”, 并在fstab中填入自动挂载节点的相关内容.创建初始化脚本映射文件“etc/inittab”, 并在inittab中填入初始化脚本的相关内容.配置初始化环境变量“etc/profile”, 并在profile内填入以下内容[4].#!/bin/shUSER="root"LOGNAME=$USER# export HOSTNAME=vexpress-a9export HOSTNAME=`cat /etc/sysconfig/HOSTNAME`export USER=rootexport HOME=rootexport PS1="[$USER@$HOSTNAME:\w]\#"PATH=/bin:/sbin:/usr/bin:/usr/sbinLD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATHexport PATH LD_LIBRARY_PATH输入以下指令, 创建其他文件夹.mkdir mnt proc root sys tmp var至此, 根文件系统的内容已经补充完毕. 接下来将介绍两种挂载根文件系统的方法: 一种是通过在QEMU上添加外设SD卡来挂载根文件系统, 另一种是通过NFS共享文件夹来挂载根文件系统.3.2 使用SD卡挂载根文件系统进入busybox-1.36.1文件夹的根目录, 输入指令创建ext3格式的文件系统模拟SD卡:sudo mkdir /mnt/rootfssudo chmod 777 /mnt/rootfsdd if=/dev/zero of=rootfs-arm32.ext3 bs=1M count=64mkfs.ext3 rootfs-arm32.ext3sudo mount -t ext3 rootfs-arm32.ext3 /mnt/rootfs -o loopsudo cp -rf ./_install/* /mnt/rootfs/sudo umount /mnt/rootfs此时根文件系统已被装进模拟SD卡内.将busybox-1.36.1、linux-5.10.186两个文件夹放在同一个目录下, 暂称为WorkSpace目录. 进入该目录并执行如下指令, 尝试引导Linux内核并挂载根文件系统:28 湖南理工学院学报(自然科学版) 第36卷qemu-system-arm -M vexpress-a9 \-m 512M \-kernel ./linux-5.10.186/arch/arm/boot/zImage \-dtb ./linux-5.10.186/arch/arm/boot/dts/vexpress-v2p-ca9.dtb \-nographic \-append "root=/dev/mmcblk0 rw console=ttyAMA0" \-sd ./busybox-1.36.1/rootfs-arm32.ext3若出现如图6所示的界面, 则说明根文件系统挂载成功.图6 模拟SD卡挂载根文件系统成功界面3.3 使用NFS挂载根文件系统在嵌入式软件调试过程中, 开发人员经常需要与开发板交换文件或修改配置文件. 如果使用SD卡挂载根文件系统, 那么每次文件交换都需要重新启动操作系统.为了提高开发效率, 开发人员可以添加NFS(Network File System)网络服务支持. 目前, NFS有诸多应用, 其中最主要的是通过配置完成网络文件的挂载, 即用它实现网络文件共享[5].给开发板使用NFS共享主机上的根文件系统, 可以将主机上修改完善并交叉编译后的可执行文件直接在开发板上运行, 实现无缝对接.安装和配置NFS网络文件系统, 输入指令:sudo apt install nfs-kernel-serversudo mkdir -p /sync/rootfssudo vim /etc/exports在exports文件中添加内容, 输入指令:/sync/rootfs *(rw,sync,no_root_squash,no_subtree_check)配置文件“/etc/default/nfs-kernel-server” , 输入指令:sudo vim /etc/default/nfs-kernel-server在nfs-kernel-server文件中修改RPCSVCGSSDOPTS的属性, 输入指令:RPCSVCGSSDOPTS="--nfs-version 2,3,4 --debug --syslog"重启NFS服务器, 输入指令:sudo /etc/init.d/rpcbind restartsudo /etc/init.d/nfs-kernel-server restart进入busybox-1.36.1根目录, 输入以下指令, 将创建好的根文件系统拷贝到“/sync/rootfs”文件夹下: sudo cp -rf * /sync/rootfs/sudo chmod 777 -R /sync/rootfs创建tap0网卡, 用于连接QEMU虚拟开发板, 输入指令:sudo tunctl -u root -t tap0sudo ifconfig tap0 192.168.1.1 promisc up进入WorkSpace目录, 输入以下指令, 运行QEMU并通过NFS挂载根文件系统:sudo qemu-system-arm \第4期王明菱, 等: 基于WSL 2子系统的嵌入式Linux操作系统移植方法 29 -M vexpress-a9 \-m 512M \-kernel ./linux-5.10.186/arch/arm/boot/zImage \-dtb ./linux-5.10.186/arch/arm/boot/dts/vexpress-v2p-ca9.dtb \-net tap,ifname=tap0,script=no,downscript=no \-net nic,macaddr=00:16:3e:00:00:01 \-nographic \-append "root=/dev/nfs rw nfsroot=1192.168.1.1:/sync/rootfs,proto=tcp,nfsvers=3,nolockinit=/linuxrc console=ttyAMA0 ip=192.168.1.100"若出现如图7所示的界面, 说明NFS挂载根文件系统成功.图7 NFS挂载根文件系统成功界面根文件系统挂载成功后, 即可对开发板进行进一步调试, 例如加载内核驱动模块、运行应用程序等.4 结束语本文介绍QEMU仿真环境和开发环境, 以Vexpress-A9开发板为例, 逐步深入描述了Linux内核源码编译、建立文件系统的详细步骤, 并采用两种不同的方式挂载根文件系统, 为嵌入式系统开发者进行跨平台操作系统裁剪移植、驱动调试、应用软件快速验证等工作提供了一种新的手段和思路, 使得嵌入式软件学习、开发和验证不再拘泥于实物开发板, 有利于提高嵌入式软件开发效率.参考文献:[1]张磊, 陈程, 林卓, 等. 基于QEMU的AARCH64平台仿真技术的研究[J]. 电脑编程技巧与维护, 2023(4): 120−122.[2]田磊. 基于ARM的嵌入式Linux操作系统的移植[D]. 西安: 西安电子科技大学, 2009.[3]程琼, 孙敏. 基于3G和嵌入式技术的数据传输系统设计[J]. 工业控制计算机, 2012, 25 (12): 93−94+96.[4]史巧硕, 范东月, 柴欣, 等. 嵌入式Linux根文件系统的构建与分析[J]. 计算机测量与控制, 2015, 23(2): 656−659+663.[5]赵娜靖, 佟志勇, 李超然, 等. 基于设备树平台下Exynos4412嵌入式Linux系统移植[J]. 2020, 11(4): 75−80.。
uboot内核移植和裁剪详细步骤-U-boot内核移植步骤:Linux 3.3.5系统移植1. 将arch/arm/mach-s3c6410/下的,mach-smdk6410.c cp为mach-my6410.c;2. 打开arch/arm/mach-s3c6410/下的Kconfig,仿照MACH_SMDK6410做一个菜单项:config MACH_MY6410bool "MY6410"select CPU_S3C6410select SAMSUNG_DEV_ADCselect S3C_DEV_HSMMCselect S3C_DEV_HSMMC1select S3C_DEV_I2C1select SAMSUNG_DEV_IDEselect S3C_DEV_FBselect S3C_DEV_RTCselect SAMSUNG_DEV_TSselect S3C_DEV_USB_HOSTselect S3C_DEV_USB_HSOTGselect S3C_DEV_WDTselect SAMSUNG_DEV_BACKLIGHTselect SAMSUNG_DEV_KEYPADselect SAMSUNG_DEV_PWMselect HAVE_S3C2410_WATCHDOG if WATCHDOGselect S3C64XX_SETUP_SDHCIselect S3C64XX_SETUP_I2C1select S3C64XX_SETUP_IDEselect S3C64XX_SETUP_FB_24BPPselect S3C64XX_SETUP_KEYPADhelpMachine support for the Pillar MY64103. 打开arch/arm/tools/mach-types文件,这里面存的是机器ID必须要和uboot里面的ID保持一致,将其283行复制添加在后面并修改为: smdk6410MACH_SMDK6410 SMDK6410 1626 xx6410 MACH_XX6410 XX6410 1626 这个机器ID和UBOOT里的机器ID相同时才能启动内核;1. 修改BSP文件mach-my6410.c,内容如下:将mach-mach-my6410.c文件中的所有smdk6410改成my6410(不要改大写SMDK6410的)MACHINE_START(MY6410, "MY6410")//这个要和Kconfig里的MACH-MY6410匹配 2. 在当前目录的Makefile最后一行加上 obj-$(CONFIG_MACH_MY6410) += mach-my6410.o3. 修改顶层的Makefile:ARCH ?= armCROSS_COMPILE ?= /usr/local/arm/4.2.2-eabi/usr/bin/arm-linux- 4. 复制arch/arm/configs/下的s3c6400-defconfig文件,然后将其保存为.config,配置内核支持EABI,再选中XX6410 board这一项,保存退出;5. 执行make menuconfig对内核进行配置:执行make编译执行make zImage生成zImage将uboot根目录下的mkimage拷贝到/user/bin目录下执行make uImage生成uImage通过以上几步linux内核移植完了,剩下就移植驱动了。
第1页 基于嵌入式技术linux内核的移植 甄儒钊 (中南民族大学 计算机科学学院,智能科学与技术专业,武汉 430074)
摘 要 在PC端基于ubuntu 12.04通过配置交叉编译环境、安装交叉工具链、设置网络参数、创建tftp服务器搭建好开发环境,再通过命令行(此处用到的工具为putty)将已有的kernel镜像文件和其配套的设备树文件烧写至开发板(基于arm7体系结构的三星公司生产的cortex系列A9芯片)中,从而实现片上系统的移植,为后续基于嵌入式系统的应用层的开发和外围设备调试等工作做准备。
关键词 ubuntu;内核移植;交叉工具链; cortex-A9; tftp;Gcc
Transplantation of Linux kernel based on Embedded Technology
Ru zhao Zhen (Project of Intelligence Science and Technology, College of Computer Science Technology, South-Central University for Nationalities, Wuhan 430074, China)
Abstract Configuring cross compiler environment, network parameter and TFTP server. And installing cross-tool chain by Ubuntu 12.04 In the PC side. Then writing the image files and Flattened Device Tree files by command line into the development board (The chip based on the arm7 architecture and belongs to the Samsung company called cortex-A9) ,in order to achieve the transplantation of the system on chip and prepare for application layer development, debugging of peripheral equipment and so on.
Keywords Ubuntu; Kernel porting; Cross tool chain; cortex-A9; tftp;Gcc
科技日新月异,科技无处不在,科技与我们生活紧密相连。以应用为中心,以计算机技术为基础,软硬件可裁剪,能适应众多应用的嵌入式系统,对功耗,可靠性,成本,体积等要求比较严格,因为这些特性,小到手机、智能手表,大到工程机械都离不开嵌入式系统的高效和精准的控制。然而作为嵌入式技术的核心过程之一:内核移植就显得尤为重要。所以此次实验探究了内核移植的详细过程,系统化地了解了主机与目标机互联的机制,对内核源码进行了初步了解,从而使得整个过程更加清晰明了,为嵌入式工程或项目做好充实的准备。
图 1 实验用开发板 Fig. 1 Experimental development board 第2页
1 实验部分 1.1 实验所需硬件设备、软件和文件包 主机(HP Pavilion 15 Notebook PC,惠普公司)、串口连接线、UTP网线、电源线、目标机(搭载cortex-A9, FS4412, 华清远见公司)、VMware Workstation 虚拟机管理软件、 ubuntu 12.04 发行版、Gcc编译包(版本Gcc 4.6.4)、putty软件(Telnet、SSH、rlogin、纯
TCP以及串行接口连接软件)、kernel镜像文件、设备树文件、串口驱动程序(型号CH341SER)、tftp文件包、bootloader文件包(uboot,遵循GPL协议,德国DENX小组)。
1.2 实验步骤及说明 1.2.1 ubuntu中所用到的主要指令、工具及解释 (1)、pwd(print work directory) 显示当前目录的绝对路径 (2)、 cd(change directory) 切换目录 例如:cd /home/ubuntu cd /home/ubuntu/Desktop 常用: “ .” 表示当前目录 cd .表示进入当前目录 .. 表示上层目录 cd .. 表示进入上层目录
(3)、ls(list) 列出当前目录的内容 常用: ls -l + 文件名 显示该文件的详细信息(默认以字节为单位) ls -a 显示当前目录所有的内容(包括隐藏文件)
(4)、touch + 文件名 新建一个文件 例如: touch test.c 常用: ls -l test.c 查看test.c文件的详细信息
(5)、clear 清除我们的屏幕 快捷键: crtl + l
(6)、mkdir(make dirctory) + 新建文件夹的名字 新建一个目录 例如:mkdir one 新建一个one文件夹 mkdir two 新建一个two文件夹
(7)、rm(remove) 删除普通文件 参数: -r 删除文件夹 -f 强制执行
常用: rm -rf test 注意:rm -rf 不管是文件夹还是普通文件都可以删除。
(8)、cp 复制文件 格式:cp 源文件 目录文件路径 例如:cp /home/ubuntu/test.c /home/ubuntu/Desktop
(9)、mv 移动文件 格式:mv 源文件 目录文件路径 例如: mv /home/ubuntu/test.c /home/ubuntu/one 第3页
区别:cp 移动后文件还存在,mv移动后文件不存在了 (10)、格式:cat + 文件名 显示文件的内容 例如:cat hello.c
(11)、echo 内容 > 要写的文件 (12)、chmod 修该文件的权限(读、写、执行) 格式: chmod 权限 文件名 常用: u: user(普通用户) g: group(组用户) o: other(其他用户) 如: chmod u+x test.c chmod u+w test.c chmod g-r test.c chmod o+x test.c
常用: 100 101 001 r-- -w- --x 八进制表示: r--->4 w---->2 x---->1
(13)、chown 修改文件所有者: 格式:sudo chown 所有者名 文件 例如:sudo chown root test.c
(14)、tar 对目录和普通文件都可以进行打包压缩 参数:
c -> 创建 x -> 释放 z -> gzip操作 j -> bzip2操作 v -> 显示过程 f -> 指定文件名(一定需要放在最后)
(15)、释放一个文件: 格式: sudo tar -xzvf work.tar.gz sudo tar -xjvf work.tar.bz2 sudo tar -xvf work.tar.gz/work.tar.bz2 参数: -C 指定释放到一个指定的目录 tar -xvf dir.tar.gz -C 指定的目录 第4页
1.2.2 关于交叉工具链 编译、链接、处理和调试跨平台体系结构的程序代码。每次执行工具链软件时,通过带有不同的参数,可以实现编译、链接、处理或者调试等不同的功能。从工具链的组成上来说,它一般由多个程序构成,分别对应着各个功能。
1.2.3 关于Gcc编译流程
图 2 Gcc编译流程 Fig. Compiling process of Gcc
1.2.4 关于tftp TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务,其中tftp-hpa是客户端,tftpd-hpa是服务器。
1.2.5 配置开发环境 (1) 在主机中安装串口驱动程序,然后安装虚拟机管理软件VMware Workstation,再在软件中安装ubuntu,然后打开ubuntu系统 (2) 安装交叉工具链和交叉编译环境 [1]解压工具链压缩包
$ cd ~ $ mkdir toolchain $ cd toolchain [2]将gcc-4.6.4.tar.xz工具包拷贝到toolchain目录下并解压 $ tar xvf gcc-4.6.4.tar.xz
[3]环境变量的添加 修改文件/etc/bash.bashrc添加如下内容 export PATH=$PATH:/home/linux/toolchain/gcc-4.6.4/bin [4]重启配置文件 $ source /etc/bash.bashrc
[5]工具链的测试