linux内核的移植.docx
《linux内核的移植.docx》由会员分享,可在线阅读,更多相关《linux内核的移植.docx(16页珍藏版)》请在冰豆网上搜索。
![linux内核的移植.docx](https://file1.bdocx.com/fileroot1/2023-2/5/f3320ba6-1a3a-46ab-9232-b18ebcb69e91/f3320ba6-1a3a-46ab-9232-b18ebcb69e911.gif)
linux内核的移植
基于嵌入式技术linux内核的移植
甄儒钊
(中南民族大学计算机科学学院,智能科学与技术专业,武汉430074)
摘要在PC端基于ubuntu12.04通过配置交叉编译环境、安装交叉工具链、设置网络参数、创建tftp服务器搭建好开发环境,再通过命令行(此处用到的工具为putty)将已有的kernel镜像文件和其配套的设备树文件烧写至开发板(基于arm7体系结构的三星公司生产的cortex系列A9芯片)中,从而实现片上系统的移植,为后续基于嵌入式系统的应用层的开发和外围设备调试等工作做准备。
关键词ubuntu;内核移植;交叉工具链;cortex-A9;tftp;Gcc
TransplantationofLinuxkernelbasedonEmbeddedTechnology
RuzhaoZhen
(ProjectofIntelligenceScienceandTechnology,CollegeofComputerScienceTechnology,South-CentralUniversityforNationalities,Wuhan430074,China)
AbstractConfiguringcrosscompilerenvironment,networkparameterandTFTPserver.Andinstallingcross-toolchainbyUbuntu12.04InthePCside.ThenwritingtheimagefilesandFlattenedDeviceTreefilesbycommandlineintothedevelopmentboard(Thechipbasedonthearm7architectureandbelongstotheSamsungcompanycalledcortex-A9),inordertoachievethetransplantationofthesystemonchipandprepareforapplicationlayerdevelopment,debuggingofperipheralequipmentandsoon.
KeywordsUbuntu;Kernelporting;Crosstoolchain;cortex-A9;tftp;Gcc
科技日新月异,科技无处不在,科技与我们生活紧密相连。
以应用为中心,以计算机技术为基础,软硬件可裁剪,能适应众多应用的嵌入式系统,对功耗,可靠性,成本,体积等要求比较严格,因为这些特性,小到手机、智能手表,大到工程机械都离不开嵌入式系统的高效和精准的控制。
然而作为嵌入式技术的核心过程之一:
内核移植就显得尤为重要。
所以此次实验探究了内核移植的详细过程,系统化地了解了主机与目标机互联的机制,对内核源码进行了初步了解,从而使得整个过程更加清晰明了,为嵌入式工程或项目做好充实的准备。
图1实验用开发板
Fig.1Experimentaldevelopmentboard
1实验部分
1.1实验所需硬件设备、软件和文件包
主机(HPPavilion15NotebookPC,惠普公司)、串口连接线、UTP网线、电源线、目标机(搭载cortex-A9,FS4412,华清远见公司)、VMwareWorkstation虚拟机管理软件、ubuntu12.04发行版、Gcc编译包(版本Gcc4.6.4)、putty软件(Telnet、SSH、rlogin、纯TCP以及串行接口连接软件)、kernel镜像文件、设备树文件、串口驱动程序(型号CH341SER)、tftp文件包、bootloader文件包(uboot,遵循GPL协议,德国DENX小组)。
1.2实验步骤及说明
1.2.1ubuntu中所用到的主要指令、工具及解释
(1)、pwd(printworkdirectory)显示当前目录的绝对路径
(2)、cd(changedirectory)切换目录
例如:
cd/home/ubuntu
cd/home/ubuntu/Desktop
常用:
“.”表示当前目录
cd.表示进入当前目录
..表示上层目录
cd..表示进入上层目录
(3)、ls(list)列出当前目录的内容
常用:
ls-l+文件名显示该文件的详细信息(默认以字节为单位)
ls-a显示当前目录所有的内容(包括隐藏文件)
(4)、touch+文件名新建一个文件
例如:
touchtest.c
常用:
ls-ltest.c查看test.c文件的详细信息
(5)、clear清除我们的屏幕
快捷键:
crtl+l
(6)、mkdir(makedirctory)+新建文件夹的名字新建一个目录
例如:
mkdirone新建一个one文件夹
mkdirtwo新建一个two文件夹
(7)、rm(remove)删除普通文件
参数:
-r删除文件夹
-f强制执行
常用:
rm-rftest
注意:
rm-rf不管是文件夹还是普通文件都可以删除。
(8)、cp复制文件
格式:
cp源文件目录文件路径
例如:
cp/home/ubuntu/test.c/home/ubuntu/Desktop
(9)、mv移动文件
格式:
mv源文件目录文件路径
例如:
mv/home/ubuntu/test.c/home/ubuntu/one
区别:
cp移动后文件还存在,mv移动后文件不存在了
(10)、格式:
cat+文件名显示文件的内容
例如:
cathello.c
(11)、echo内容>要写的文件
(12)、chmod修该文件的权限(读、写、执行)
格式:
chmod权限文件名
常用:
u:
user(普通用户)
g:
group(组用户)
o:
other(其他用户)
如:
chmodu+xtest.c
chmodu+wtest.c
chmodg-rtest.c
chmodo+xtest.c
常用:
100101001
r---w---x
八进制表示:
r--->4
w---->2
x---->1
(13)、chown修改文件所有者:
格式:
sudochown所有者名文件
例如:
sudochownroottest.c
(14)、tar对目录和普通文件都可以进行打包压缩
参数:
c->创建
x->释放
z->gzip操作
j->bzip2操作
v->显示过程
f->指定文件名(一定需要放在最后)
(15)、释放一个文件:
格式:
sudotar-xzvfwork.tar.gz
sudotar-xjvfwork.tar.bz2
sudotar-xvfwork.tar.gz/work.tar.bz2
参数:
-C指定释放到一个指定的目录
tar-xvfdir.tar.gz-C指定的目录
1.2.2关于交叉工具链
编译、链接、处理和调试跨平台体系结构的程序代码。
每次执行工具链软件时,通过带有不同的参数,可以实现编译、链接、处理或者调试等不同的功能。
从工具链的组成上来说,它一般由多个程序构成,分别对应着各个功能。
1.2.3关于Gcc编译流程
图2Gcc编译流程
Fig.CompilingprocessofGcc
1.2.4关于tftp
TFTP(TrivialFileTransferProtocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务,其中tftp-hpa是客户端,tftpd-hpa是服务器。
1.2.5配置开发环境
(1)在主机中安装串口驱动程序,然后安装虚拟机管理软件VMwareWorkstation,再在软件中安装ubuntu,然后打开ubuntu系统
(2)安装交叉工具链和交叉编译环境
[1]解压工具链压缩包
$cd~
$mkdirtoolchain
$cdtoolchain
[2]将gcc-4.6.4.tar.xz工具包拷贝到toolchain目录下并解压
$tarxvfgcc-4.6.4.tar.xz
[3]环境变量的添加
修改文件/etc/bash.bashrc添加如下内容
exportPATH=$PATH:
/home/linux/toolchain/gcc-4.6.4/bin
[4]重启配置文件
$source/etc/bash.bashrc
[5]工具链的测试
图3测试结果
Fig.3testresult
(3)设置网络连接
图4设置网卡桥接
Fig.4Setnetworkadapter
图5新建网络
Fig.5makenewconnection
图6设置网络
Fig.6settingnetwork
图7网络桥接
Fig.7bridgeconnectingofnetwork
(4)安装putty并配置参数
用串口线将目标机与主机相连,打开设备管理器找到相应的端口查看数据,然后打开putty并配置波特率。
图8设置波特率
Fig.8settingbaudrate
(5)搭建tftp服务器
[1].确认虚拟机和外网连通
[2].安装tftp服务软件并启动
图9将tftp文件放置与home文件同级
Fig.9PlacetheTFTPfileatthesamelevelasthehomefile
[3].配置tftp服务软件权限和参数
图10编辑tftpd-hpa文件
Fig.10Edittftpd-hpafile
图11编辑内容
Fig.11edits
[4].本机验证tftp服务
图12验证tftp服务器
Fig.12ValidateTFTPserver
1.2.6装载镜像文件和设备树文件
分别拷贝镜像文件到arch/arm/boot目录下,拷贝内核和设备树文件到/tftpboot目录下,修改Makefile文件(即编译规则文件)。
1.2.7修改uboot启动参数
打开开发板在tftp服务器运行成功的情况下,打开主机putty工具使主机与开发板连通,然后修改环境变量如下:
#setenvserverip192.168.9.120
#setenvipaddr192.168.9.233
#setenvbootcmdtftp41000000uImage\;tftp42000000exynos4412-fs4412.dtb\;bootm41000000–42000000
#setenvbootargsroot=/dev/nfsnfsroot=192.168.9.120:
/source/rootfsrwconsole=ttySAC2,115200init=/linuxrcip=192.168.9.233
#saveenv
注意:
192.168.9.120对应Ubuntu的ip
192.168.9.233对应开发板的ip
1.3最终操作及结果
1.3.1烧写设备树
图13烧写设备树
Fig.13Writingthedevicetreefile
1.3.2规定其写入内存范围
图14规定内存
Fig.14settingthememory
1.3.3写入内核(其中内核文件为uImage)
图15写入内核
Fig.15Writingthekernelfile
1.3.4读取
图16读取
Fig.16reading
1.3.5设置内核启动参数(告诉内核第一个程序位置)
图17设置内核启动参数
Fig.17Settingkernelbootparameters
1.3.6设置自动启动
图18设置自动启动
Fig.18Settingautostart
1.3.7启动后界面(此时显示片上linux文件系统,标志着内核移植完成)
图19启动后的界面
Fig.19theinterfaceafterthestarting
2结论及分析
(1)此次基于嵌入式技术的内核移植,克服了x86体系架构和ARM体系架构指令集互不通用的问题。
(2)内核移植中牵扯到了编译、汇编等具体的过程,如果忽视这些过程,若在烧入内核的过程中出现问题,就无法了解哪一环出现问题,如没有配置makefile文件,就不能编译,因为一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。
(3)在主机与目标机连接过程中烧入内核,不可忽视的工具就是tftp,其数据传输协议使得主机与目标机之间的数据传输成为可能。
(4)对于所操作的重要对象linux内核来说,“一切皆文件”是其精髓,所以文件系统的重要性对于该系统是不言而喻的,深刻地了解其文件系统,和其宏定义,对于学习其源码是至关重要的。
参考文献
[1](美)ArthurGriffith.GCC技术参考大全.清华大学出版,2007,254-268.
[2]吴恒奎.LINUX指令速查手册.人民邮电出版社,2007.
[3](美)JonahanCorbet.LINUX设备驱动程序.中国电力出版社(第三版),2011.
[4]邢国庆,邹浪.Ubuntu权威指南.人民邮电出版社,2010,470-565
[5]杨水清,张剑,施云飞.精通ARM嵌入式Linux系统开发.电子工业出版社,2012,30.75.69.
[6](美)DanielP.Bovet.深入理解LINUX内核.中国电力出版社,2008.