实验室实验2Linux内核移植.docx

上传人:b****2 文档编号:1230272 上传时间:2023-04-30 格式:DOCX 页数:19 大小:165.33KB
下载 相关 举报
实验室实验2Linux内核移植.docx_第1页
第1页 / 共19页
实验室实验2Linux内核移植.docx_第2页
第2页 / 共19页
实验室实验2Linux内核移植.docx_第3页
第3页 / 共19页
实验室实验2Linux内核移植.docx_第4页
第4页 / 共19页
实验室实验2Linux内核移植.docx_第5页
第5页 / 共19页
实验室实验2Linux内核移植.docx_第6页
第6页 / 共19页
实验室实验2Linux内核移植.docx_第7页
第7页 / 共19页
实验室实验2Linux内核移植.docx_第8页
第8页 / 共19页
实验室实验2Linux内核移植.docx_第9页
第9页 / 共19页
实验室实验2Linux内核移植.docx_第10页
第10页 / 共19页
实验室实验2Linux内核移植.docx_第11页
第11页 / 共19页
实验室实验2Linux内核移植.docx_第12页
第12页 / 共19页
实验室实验2Linux内核移植.docx_第13页
第13页 / 共19页
实验室实验2Linux内核移植.docx_第14页
第14页 / 共19页
实验室实验2Linux内核移植.docx_第15页
第15页 / 共19页
实验室实验2Linux内核移植.docx_第16页
第16页 / 共19页
实验室实验2Linux内核移植.docx_第17页
第17页 / 共19页
实验室实验2Linux内核移植.docx_第18页
第18页 / 共19页
实验室实验2Linux内核移植.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

实验室实验2Linux内核移植.docx

《实验室实验2Linux内核移植.docx》由会员分享,可在线阅读,更多相关《实验室实验2Linux内核移植.docx(19页珍藏版)》请在冰点文库上搜索。

实验室实验2Linux内核移植.docx

实验室实验2Linux内核移植

项目二:

Linux内核移植

1.能力培养目标

●了解嵌入式Linux内核的构成

●掌握内核裁减定制的方法

●掌握内核编译的方法

●掌握内核烧写的方法

2.项目任务要求

(1)项目任务

Linux内核的裁剪、编译和烧写。

(2)项目来源及应用

对于较复杂的嵌入式系统项目,当硬件平台制作好之后,就需要向其移植操作系统,如果移植的是嵌入式Linux且为GUI应用,那么移植过程一般包含:

第一步,移植引导程序(Vivi、Blob、U-Boot等);

第二步,移植内核kernel;(本次实验内容)

第三步,移植根文件系统;

第四步,移植库文件,如QT库;

第五步,运行项目程序。

(3)功能需求

裁剪一个可用的Linux内核

●选择正确的处理器类型

●使其支持网卡、小键盘、USB鼠标、声卡等设备

●成功编译后烧写到目标机上

●内核能正确加载运行

●键盘驱动可用

(4)项目开发环境需求

硬件

宿主机

PC机、USB转串口线、网线

目标机

ARM目标机

软件

宿主机

windows系统:

□WinXP□Xin7其他:

Linux系统:

□RedHat9□RHEL4其他:

VMWare虚拟机:

□VMWareWorkstation9其他:

串口调试工具:

□WinXP自带的超级终端

□Linux自带的minicom

□第三方串口工具:

目标机

嵌入式Linux

3.项目预习

(1)了解项目目标、项目任务要求、项目设计和项目实施步骤。

(2)下载本次实验所需要的软件和代码。

将kbd_test目录放到Linux虚拟机的up-techpxa270cl目录下。

(3)完成内核裁剪及编译好内核映像。

(4)回答以下问题

如何能够在目标机上访问宿主机上的文件?

说明使用mount命令进行文件挂载的方法。

说明mount命令执行不成功可能的原因和解决方法。

说明本实验所使用的Linux内核版本。

说明Linux内核裁减定制的方法。

4.项目设计

4.1选择Linux内核裁剪方法

Linux内核的裁减配置的三种命令:

1、makeconfig:

命令行模式,一行一行的配置,不推荐使用。

2、makemenuconfig:

大多人熟悉的menuconfig菜单。

3、makexconfig:

基于QT图形化配置,菜单结构清晰。

所有内核裁减配置过程,都是通过Config.in(2.4内核)或Kconfig(2.6内核)经由不同脚本解释器产生.config配置文件。

makemenuconfig配置菜单

makexconfig配置菜单

在配置时,通常有三种选择方式:

●Y:

将该功能编译进内核;

●N:

不将该功能编译进内核;

●M:

以模块方式编译,需要时可以动态插入到内核中。

在makemenuconfig界面中,用空格键来切换各种选择状态;在makexconfig界面中,可以用空格键,也可以使用鼠标来选择。

注意:

对于陌生选项,请不要修改,保留默认即可。

5.项目实施

=======================================

课堂实验部分

=======================================

第一部分:

将键盘功能直接编译进内核

(1)检查修改内核源代码目录下的Makefile文件。

命令:

[root@localhost/]#cd/up-techpxa270cl/kernel/

[root@localhostkernel]#ls

[root@localhostkernel]#tar-jxvflinux-2.6.9-uptechpxa270cl.tar.bz2

[root@vm-dev]#cd/up-techpxa270cl/kernel/linux-2.6.9-uptechpxa270cl

#geditMakefile打开Makefile文件,找到以下几行:

如果不是下面的结果,则按下面内容修改。

其中:

ARCH:

=arm表示编译支持ARM体系结构

CROSS_COMPILE=您的交叉编译工具中arm-Linux所在目录/arm-Linux-

例如:

CROSS_COMPILE=arm-linux-

(2)裁剪新内核

在内核源代码目录(/up-techpxa270cl/kernel/linux-2.6.9-up-techpxa270cl/)中,拷贝一个已有的默认配置文件更名为.config(如果询问是否覆盖,输入y),然后在默认配置基础上,使用makemenuconfig对内核进行裁减。

[root@linux-2.6.9-uptechpxa270cl]#cpup-techpxa270-cl-2008-05-26.config.config

[root@linux-2.6.9-uptechpxa270cl]#makemenuconfig

如果出现“atleast80columns”,说明屏幕不够大,全屏即可。

思考:

.config配置文件作用?

按照以下步骤和提示,选中目标机所需的模块支持(使用“上下箭头”移动,使用“Enter”进入,使用“Esc”返回上级)。

a、选择处理器类型(默认已经选上)

SystemType--->

ARMsystemtype(PXA2xx-based)--->

(X)PXA2xx-based

b、网卡设备(默认已经选上)

Networkingsupport--->

[*]Networkdevicesupport

Ethernet(10or100Mbit)--->

[*]Ethernet(10or100Mbit)

<*>DM9000support

c、矩阵键盘设备(使用空格键切换选择,选中Atmel项,按下空格键,可以在*,M和空之间变换,*表示编译到内核,M表示动态模块方式加载,空表示不支持)

I2Csupport--->

<*>I2Csupport

I2CHardwareBussupport--->

<*>IntelPXA2XXI2Cadapter

OtherI2CChipsupport--->

<*>AtmelMega8MCUonUPTechPXA270-classicplatform

[*]MatrixKeyboard

d、USB鼠标支持

Inputdevicesupport--->

<*>Mouseinterface

USBsupport--->(位置在下方,默认已经选上)

<*>USBHumanInterfaceDevice(fullHID)support

[*]HIDinputlayersupport

[*]/dev/hiddevrawHIDdevicesupport

e、声卡支持(默认已经选上)

Sound--->

<*>Soundcardsupport

OpenSoundSystem--->

<*>PXAAudio

<*>PXAAC97audiosupport

<*>UCB1X00coresupport

<*>UCB1X00touchscreenplugin

退出并保存配置信息。

思考:

上面配置选项应该在哪个目录下的哪个文件里(KConfig)?

通过makemenuconfig裁剪完后,.config文件会有哪些变化?

若内核中没有你想要的功能模块选项将怎么办(拷贝驱动程序,修改KConfig等)?

(3)编译新内核

在内核目录下(up-techpxa270cl/kernel/linux-2.6.9-up-techpxa270cl/),执行make命令,进行内核的编译。

[root@linux-2.6.9-uptechpxa270cl]#make

编译成功后,会在/up-techpxa270cl/kernel/linux-2.6.9-up-techpxa270cl/arch/arm/boot目录下生成新内核文件zImage。

[root@linux-2.6.9-uptechpxa270cl]#cd/up-techpxa270cl/kernel/linux-2.6.9-up-techpxa270cl/arch/arm/boot

[root@boot]#ls

(4)烧写新内核

0)将已经生成的zImage拷贝到/tftpboot目录下(如果询问是否覆盖,输入y)。

[root@boot]#cp–rfzImage/tftpboot

1)配置tftp服务

首先请确保Linux虚拟机的tftp服务已经正确配置,并运行。

①在虚拟机上用vi打开“/etc/xinetd.d/tftp”,做相应的修改。

(大部分网络服务都是由它启动的)

[root@vm-dev]#vi/etc/xinetd.d/tftp

②找到disable=no这一项,看看是不是此状态(默认是),若不是,则改成此状态,保存退出。

③重启tftp服务,命令如下:

[root@vm-dev]#servicexinetdrestart

④查看tftp服务是否启动:

[root@vm-dev]#servicexinetdstatus

=======================================

实验室实验部分

=======================================

2)烧写新内核

首先检查虚拟机IP是不是192.168.0.10,若不是,则用ifconfigeth0192.168.0.10改过来。

启动目标机,进入blob模式下(按回车之外的任意键)。

然后将内核zImage烧写到Ram。

blob>tdownloadkernel

出现下面状态表示正确:

file:

zImage,partkernel

downloadingzImageto0xa0200000

done

如果出现ARPtimeout错误,可能是网络原因,可以尝试将windows网卡禁用并启用,改IP,检查网线等。

接着,将内核zImage烧写到Flash。

blob>flashkernel

出现下面状态表示正确:

Savingkerneltoflash

fwrite0xa02000000x1000001597152

Erasing13blocksat0x00100000:

.............done

Flashing0x00185ee0bytesat0x00100000:

.............done

说明:

启动目标机后,应该首先配置tftp服务器的IP,配置命令如下:

blob>ifconfigserver192.168.0.10。

因为虚拟机IP前面已经配置为192.168.0.10了,所以此步就不用做了。

其中,tftpserver的IP是Linux虚拟机的IP。

重启ARM目标机后可能需要重新配置tftpserver的IP。

如果在blob下修改IP失败或者超时等,可以将Linux虚拟机的IP修改为192.168.0.10(默认的serverIP是192.168.0.10)。

(5)测试新内核

重启ARM目标机,按回车键,看是否能正常进入Linux系统。

然后,查看键盘驱动是否好用。

[root@Intel/]#ls/dev/Mega8Kbd命令查看键盘设备节点

会显示:

如果看不到设备结点,创建设备结点的命令是

mknod设备名设备类型主设备号从设备号

如:

mknod/dev/Mega8kbdc2530

通过cat/proc/devices查看设备信息,以及运行键盘测试程序getkey。

看看是否键盘驱动已经直接加入了内核,并且已经自动创建好设备节点,键盘测试程序能够正确获得按键信息。

再次查看当前系统设备情况,结果表明有Mega8Kbd键盘设备。

[root@Intelkbd_test]#cat/proc/devices

Characterdevices:

1mem

2pty

3ttyp

4/dev/vc/0

4tty

4ttyS

5/dev/tty

5/dev/console

5/dev/ptmx

7vcs

10misc

13input

14sound

21sg

29fb

81video4linux

89i2c

90mtd

108ppp

128ptm

136pts

161ircomm

180usb

252Mega8ICcard

253Mega8Kbd

254pcmcia

(6)将kbd_test目录放到Linux虚拟机的up-techpxa270cl目录下,命令如下:

[root@vm-dev~]#cp-rf/mnt/hgfs/share/kbd_test/up-techpxa270cl/

kbd_test目录中的内容如下:

我们只用到了getkey。

其中:

●getkey为交叉编译生成的可执行程序,用于测试键盘设备;

●mega8.ko为键盘等控制芯片的驱动程序,i2c-pxa.ko为i2c接口驱动;

●install_driver.sh为动态加载mega.ko和i2c-pxa.ko的脚本;

●zImage为裁剪、编译后的内核。

在Putty上(目标机)上,使用mount命令挂载,运行键盘测试程序getkey。

查看getkey是否可以运行?

Can'topenkeyboard!

表示不能打开键盘设备。

为防止大文件传输失败,在mount中加入参数–ointr,nolock,rsize=4096,wsize=4096

[root@Intel/]#mount–tnfs–ointr,nolock,rsize=4096,wsize=4096192.168.0.10:

/up-techpxa270cl/mnt/nfs

[root@Intel/]#cd/mnt/nfs/kbd_test

运行键盘测试程序:

按ARM目标机上的小键盘,可以正确读取到按键值。

[root@Intelkbd_test]#./getkey

 

=======================================

扩展发辉部分

=======================================

第二部分:

将键盘功能以模块化方式编译

(1)在虚拟机上,重新裁剪内核,命令:

[root@vm-dev]#cd/up-techpxa270cl/kernel/linux-2.6.9-uptechpxa270cl

[root@vm-dev]#makemenuconfig

按照以下步骤和提示,选中目标机所需的模块支持(使用“上下箭头”移动,使用“Enter”进入,使用“Esc”返回上级)。

矩阵键盘设备(使用空格键切换选择,选中Atmel项,按下空格键,可以在*,M和空之间变换,*表示编译到内核,M表示动态模块方式加载,空表示不支持)

I2Csupport--->

<*>I2Csupport

I2CHardwareBussupport--->

IntelPXA2XXI2Cadapter

OtherI2CChipsupport--->

AtmelMega8MCUonUPTechPXA270-classicplatform

[*]MatrixKeyboard

退出并保存配置信息。

(2)编译新内核

在内核目录下(up-techpxa270cl/kernel/linux-2.6.9-up-techpxa270cl/),执行make命令,进行内核的编译。

[root@vm-dev]#make

将已经生成的zImage拷贝到/tftpboot目录下(如果询问是否覆盖,输入y)。

[root@vm-dev]#cp–rfzImage/tftpboot

(3)重新烧写新内核,见第一部分的2)

(4)启动ARM目标机,查看内核对键盘的支持情况(通过超级终端)

查看键盘设备节点/dev/Mega8Kbd是否已经存在?

Nosuchfileordirectory表示不存在。

[root@Intel/]#ls/dev/Mega8Kbd

ls:

/dev/Mega8Kbd:

Nosuchfileordirectory

查看键盘驱动是否以模块形式动态加载?

以下结果表示没有动态加载。

[root@Intel/]#lsmod

ModuleSizeUsedbyNottainted

[root@Intel/]#

查看当前系统设备中是否有Mega8Kbd设备?

[root@Intel/]#cat/proc/devices

Characterdevices:

1mem

2pty

3ttyp

4/dev/vc/0

4tty

4ttyS

5/dev/tty

5/dev/console

5/dev/ptmx

7vcs

10misc

13input

14sound

21sg

29fb

81video4linux

89i2c

90mtd

108ppp

128ptm

136pts

161ircomm

180usb

254pcmcia

(5)动态加载键盘驱动,并测试

1)在虚拟机上,找到我们要加载的驱动模块,命令:

[root@vm-dev~]#cddrivers/i2c

[root@vm-dev~]#cdbusses/

[root@vm-dev~]#cp-rfi2c-pxa.ko/up-techpxa270cl/

[root@vm-dev~]#cd..

[root@vm-dev~]#cdchips/

[root@vm-dev~]#cp-rfmega8.ko/up-techpxa270cl/

2)在目标机上,重新mount

[root@Intel/]#mount–tnfs–ointr,nolock,rsize=4096,wsize=4096192.168.0.10:

/up-techpxa270cl/mnt/nfs

[root@Intel/]#cd/mnt/nfs/

[root@Intelnfs/]#ls

[root@Intelnfs/]#insmodi2c-pxa.ko

[root@Intelnfs/]#insmodmega8.ko

再次查看键盘设备节点是否已经存在?

看到/dev/Mega8Kbd表明已经存在。

如果看不到设备结点,创建设备结点的命令是

mkmod设备名设备类型主设备号从设备号

如:

mkmod/dev/Mega8kbdc2530

再次查看键盘驱动是否以模块形式动态加载?

结果表明动态加载了驱动。

再次查看当前系统设备情况,结果表明有Mega8Kbd键盘设备。

[root@Intelnfs]#cat/proc/devices

Characterdevices:

1mem

2pty

3ttyp

4/dev/vc/0

4tty

4ttyS

5/dev/tty

5/dev/console

5/dev/ptmx

7vcs

10misc

13input

14sound

21sg

29fb

81video4linux

89i2c

90mtd

108ppp

128ptm

136pts

161ircomm

180usb

252Mega8ICcard

253Mega8Kbd

254pcmcia

再次运行键盘测试程序:

按ARM目标机上的小键盘,可以正确读取到按键值。

[root@Intelnfs]#cd/mnt/nfs/kbd_test

[root@Intelkbd_test]#./getkey

whichkeyyoupressis1

whichkeyyoupressis2

whichkeyyoupressis3

6.项目问题

1、说明本次实验中的硬件系统。

2、嵌入式Linux内核的代码构成?

主要的设备驱动程序放在什么目录下?

3、说明动态加载模块的命令,卸载模块的命令,创建设备节点的命令。

4、说明内核裁剪定制的方法。

5、在配置内核时,通常有三种选择方式:

●Y:

将该功能编译进内核;

●N:

不将该功能编译进内核;

●M:

以模块方式编译,需要时可以动态插入到内核中。

试问,选择M和不进行内核配置、编译直接使用insmod动态加载模块(第5大项步骤3)有何不同?

6、如何对内核kernel进行裁减定制,例如增加一个模块?

7、配置文件主要有哪些?

8、.config文件作用?

内核中有几个.config文件?

9、Kconfig文件作用?

内核中有几个Kconfig文件?

10、Makefile文件作用?

内核中有几个Makefile文件?

11、如何编译内核kernel?

12、内核kernel如何烧写到目标机中?

7.项目考核

考核项目

权重

主要考核点

实验预习(个人)

20%

实验要求的预习项

实验过程及结果(个人)

40%

动手执行能力

解决问题的能力

项目完成程度

实验总结(个人)

40%

实验报告检查

提问

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2