ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:165.33KB ,
资源ID:12700242      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12700242.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验室实验2Linux内核移植.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、实验室实验2Linux内核移植项目二:Linux内核移植 1. 能力培养目标 了解嵌入式Linux内核的构成 掌握内核裁减定制的方法 掌握内核编译的方法 掌握内核烧写的方法2. 项目任务要求(1)项目任务 Linux内核的裁剪、编译和烧写。(2)项目来源及应用对于较复杂的嵌入式系统项目,当硬件平台制作好之后,就需要向其移植操作系统,如果移植的是嵌入式Linux且为GUI应用,那么移植过程一般包含:第一步,移植引导程序(Vivi、Blob、U-Boot等);第二步,移植内核kernel;(本次实验内容)第三步,移植根文件系统;第四步,移植库文件,如QT库;第五步,运行项目程序。(3)功能需求裁剪

2、一个可用的Linux内核 选择正确的处理器类型 使其支持网卡、小键盘、USB鼠标、声卡等设备 成功编译后烧写到目标机上 内核能正确加载运行 键盘驱动可用(4)项目开发环境需求硬件宿主机PC机、USB转串口线、网线目标机ARM目标机软件宿主机windows系统:WinXP Xin7 其他: Linux 系统:RedHat 9 RHEL4 其他: VMWare虚拟机:VMWare Workstation9 其他: 串口调试工具:WinXP自带的超级终端Linux自带的minicom第三方串口工具: 目标机嵌入式Linux 3. 项目预习(1)了解项目目标、项目任务要求、项目设计和项目实施步骤。(2

3、)下载本次实验所需要的软件和代码。将kbd_test目录放到Linux虚拟机的up-techpxa270cl目录下。(3)完成内核裁剪及编译好内核映像。(4)回答以下问题 如何能够在目标机上访问宿主机上的文件? 说明使用mount命令进行文件挂载的方法。 说明mount命令执行不成功可能的原因和解决方法。 说明本实验所使用的Linux内核版本。 说明Linux内核裁减定制的方法。4. 项目设计4.1选择Linux内核裁剪方法Linux内核的裁减配置的三种命令:1、make config:命令行模式,一行一行的配置,不推荐使用。2、make menuconfig:大多人熟悉的menuconfig

4、菜单。3、make xconfig:基于QT图形化配置,菜单结构清晰。所有内核裁减配置过程,都是通过Config.in(2.4内核)或Kconfig(2.6内核)经由不同脚本解释器产生.config配置文件。make menuconfig配置菜单make xconfig配置菜单在配置时,通常有三种选择方式: Y:将该功能编译进内核; N:不将该功能编译进内核; M:以模块方式编译,需要时可以动态插入到内核中。在make menuconfig界面中,用空格键来切换各种选择状态;在make xconfig界面中,可以用空格键,也可以使用鼠标来选择。注意:对于陌生选项,请不要修改,保留默认即可。5.

5、 项目实施课堂实验部分第一部分:将键盘功能直接编译进内核(1)检查修改内核源代码目录下的Makefile文件。命令:rootlocalhost /#cd /up-techpxa270cl/kernel/rootlocalhost kernel# lsrootlocalhost kernel# tar -jxvf linux-2.6.9-uptechpxa270cl.tar.bz2rootvm-dev # cd /up-techpxa270cl/kernel/linux-2.6.9-uptechpxa270cl#gedit Makefile打开Makefile文件,找到以下几行:如果不是下面的结

6、果,则按下面内容修改。其中: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),然后在默认配置基础上,使用make menuconfig对内核进行裁减。root linux-2.6.9-uptechpxa270cl # cp

7、up-techpxa270-cl-2008-05-26.config .configroot linux-2.6.9-uptechpxa270cl # make menuconfig如果出现“at least 80 columns”,说明屏幕不够大,全屏即可。思考:.config配置文件作用?按照以下步骤和提示,选中目标机所需的模块支持(使用“上下箭头”移动,使用“Enter”进入,使用“Esc”返回上级)。a、选择处理器类型(默认已经选上)System Type - ARM system type (PXA2xx-based) - (X) PXA2xx-basedb、网卡设备(默认已经选上)

8、Networking support - * Network device supportEthernet (10 or 100Mbit) -* Ethernet (10 or 100Mbit) DM9000 supportc、矩阵键盘设备(使用空格键切换选择,选中Atmel项,按下空格键,可以在*,M和空之间变换,*表示编译到内核,M表示动态模块方式加载,空表示不支持)I2C support - I2C supportI2C Hardware Bus support - Intel PXA2XX I2C adapterOther I2C Chip support - Atmel Mega8

9、MCU on UPTechPXA270-classic platform* Matrix Keyboard d、USB鼠标支持Input device support - Mouse interface USB support - (位置在下方,默认已经选上) USB Human Interface Device (full HID) support* HID input layer support* /dev/hiddev raw HID device supporte、声卡支持(默认已经选上)Sound - Sound card supportOpen Sound System - PXA

10、 Audio PXA AC97 audio support UCB1X00 core support UCB1X00 touchscreen plugin 退出并保存配置信息。思考:上面配置选项应该在哪个目录下的哪个文件里(KConfig)?通过make menuconfig裁剪完后,.config文件会有哪些变化?若内核中没有你想要的功能模块选项将怎么办(拷贝驱动程序,修改KConfig等)?(3)编译新内核在内核目录下(up-techpxa270cl/kernel/linux-2.6.9-up-techpxa270cl/),执行make命令,进行内核的编译。root linux-2.6.9

11、-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/bootrootboot# ls(4)烧写新内核0)将已经生成的zImage拷贝到/tftpboot目录下(如果询问是否覆盖,输入y)。rootboot #cp rf zImage

12、/tftpboot1)配置tftp服务首先请确保Linux虚拟机的tftp服务已经正确配置,并运行。在虚拟机上用vi打开“/etc/xinetd.d/tftp”,做相应的修改。(大部分网络服务都是由它启动的)rootvm-dev #vi /etc/xinetd.d/tftp找到disable = no这一项,看看是不是此状态(默认是),若不是,则改成此状态,保存退出。重启tftp服务,命令如下:rootvm-dev #service xinetd restart查看tftp服务是否启动:rootvm-dev #service xinetd status实验室实验部分2)烧写新内核首先检查虚拟机

13、IP是不是192.168.0.10,若不是,则用ifconfig eth0 192.168.0.10改过来。 启动目标机,进入blob模式下(按回车之外的任意键)。然后将内核zImage烧写到Ram。blob tdownload kernel出现下面状态表示正确:file: zImage, part kerneldownloading zImage to 0xa0200000done如果出现ARP timeout错误,可能是网络原因,可以尝试将windows网卡禁用并启用,改IP,检查网线等。接着,将内核zImage烧写到Flash。blob flash kernel出现下面状态表示正确:Sa

14、ving kernel to flashfwrite 0xa0200000 0x100000 1597152Erasing 13 blocks at 0x00100000:.doneFlashing 0x00185ee0 bytes at 0x00100000:.done说明:启动目标机后,应该首先配置tftp服务器的IP,配置命令如下:blob ifconfig server 192.168.0.10。因为虚拟机IP前面已经配置为192.168.0.10了,所以此步就不用做了。 其中,tftp server的IP是Linux虚拟机的IP。重启ARM目标机后可能需要重新配置tftp serve

15、r的IP。如果在blob下修改IP失败或者超时等,可以将Linux虚拟机的IP修改为192.168.0.10(默认的server IP是192.168.0.10)。(5)测试新内核重启ARM目标机,按回车键,看是否能正常进入Linux系统。然后,查看键盘驱动是否好用。rootIntel /# ls /dev/Mega8Kbd 命令查看键盘设备节点会显示:如果看不到设备结点,创建设备结点的命令是mknod 设备名 设备类型 主设备号 从设备号如:mknod /dev/Mega8kbd c 253 0通过cat /proc/devices查看设备信息,以及运行键盘测试程序getkey。看看是否键盘

16、驱动已经直接加入了内核,并且已经自动创建好设备节点,键盘测试程序能够正确获得按键信息。再次查看当前系统设备情况,结果表明有Mega8Kbd键盘设备。rootIntel kbd_test#cat /proc/devicesCharacter devices: 1 mem 2 pty 3 ttyp 4 /dev/vc/0 4 tty 4 ttyS 5 /dev/tty 5 /dev/console 5 /dev/ptmx 7 vcs 10 misc 13 input 14 sound 21 sg 29 fb 81 video4linux 89 i2c 90 mtd108 ppp128 ptm136

17、 pts161 ircomm180 usb252 Mega8ICcard253 Mega8Kbd254 pcmcia(6)将kbd_test目录放到Linux虚拟机的up-techpxa270cl目录下,命令如下:rootvm-dev #cp -rf /mnt/hgfs/share/kbd_test /up-techpxa270cl/kbd_test目录中的内容如下:我们只用到了getkey。其中: getkey为交叉编译生成的可执行程序,用于测试键盘设备; mega8.ko为键盘等控制芯片的驱动程序,i2c-pxa.ko为i2c接口驱动; install_driver.sh为动态加载mega

18、.ko和i2c-pxa.ko的脚本; zImage为裁剪、编译后的内核。在Putty上(目标机)上,使用mount命令挂载,运行键盘测试程序getkey。查看getkey是否可以运行?Cant open keyboard!表示不能打开键盘设备。为防止大文件传输失败,在mount中加入参数o intr,nolock,rsize=4096,wsize=4096rootIntel /# mount t nfs o intr,nolock,rsize=4096,wsize=4096 192.168.0.10:/up-techpxa270cl /mnt/nfsrootIntel /#cd /mnt/nf

19、s/kbd_test运行键盘测试程序:按ARM目标机上的小键盘,可以正确读取到按键值。rootIntel kbd_test#./getkey扩展发辉部分第二部分:将键盘功能以模块化方式编译(1)在虚拟机上,重新裁剪内核,命令:rootvm-dev # cd /up-techpxa270cl/kernel/linux-2.6.9-uptechpxa270clrootvm-dev # make menuconfig按照以下步骤和提示,选中目标机所需的模块支持(使用“上下箭头”移动,使用“Enter”进入,使用“Esc”返回上级)。矩阵键盘设备(使用空格键切换选择,选中Atmel项,按下空格键,可以

20、在*,M和空之间变换,*表示编译到内核,M表示动态模块方式加载,空表示不支持)I2C support - I2C supportI2C Hardware Bus support - Intel PXA2XX I2C adapterOther I2C Chip support - Atmel Mega8 MCU on UPTechPXA270-classic platform* Matrix Keyboard 退出并保存配置信息。(2)编译新内核在内核目录下(up-techpxa270cl/kernel/linux-2.6.9-up-techpxa270cl/),执行make命令,进行内核的编译

21、。rootvm-dev #make将已经生成的zImage拷贝到/tftpboot目录下(如果询问是否覆盖,输入y)。rootvm-dev #cp rf zImage /tftpboot(3)重新烧写新内核,见第一部分的2)(4)启动ARM目标机,查看内核对键盘的支持情况(通过超级终端)查看键盘设备节点/dev/Mega8Kbd是否已经存在?No such file or directory表示不存在。rootIntel /#ls /dev/Mega8Kbdls: /dev/Mega8Kbd: No such file or directory查看键盘驱动是否以模块形式动态加载?以下结果表示没

22、有动态加载。rootIntel /#lsmodModule Size Used by Not taintedrootIntel /#查看当前系统设备中是否有Mega8Kbd设备?rootIntel /#cat /proc/devicesCharacter devices: 1 mem 2 pty 3 ttyp 4 /dev/vc/0 4 tty 4 ttyS 5 /dev/tty 5 /dev/console 5 /dev/ptmx 7 vcs 10 misc 13 input 14 sound 21 sg 29 fb 81 video4linux 89 i2c 90 mtd108 ppp12

23、8 ptm136 pts161 ircomm180 usb254 pcmcia(5)动态加载键盘驱动,并测试1)在虚拟机上,找到我们要加载的驱动模块,命令:rootvm-dev # cd drivers/i2crootvm-dev # cd busses/rootvm-dev # cp -rf i2c-pxa.ko /up-techpxa270cl/rootvm-dev # cd .rootvm-dev # cd chips/rootvm-dev # cp -rf mega8.ko /up-techpxa270cl/2)在目标机上,重新mountrootIntel /# mount t nfs

24、 o intr,nolock,rsize=4096,wsize=4096 192.168.0.10:/up-techpxa270cl /mnt/nfsrootIntel /#cd /mnt/nfs/rootIntel nfs/#lsrootIntel nfs/# insmod i2c-pxa.ko rootIntel nfs/# insmod mega8.ko再次查看键盘设备节点是否已经存在?看到/dev/Mega8Kbd表明已经存在。如果看不到设备结点,创建设备结点的命令是mkmod 设备名 设备类型 主设备号 从设备号如:mkmod /dev/Mega8kbd c 253 0再次查看键盘驱

25、动是否以模块形式动态加载?结果表明动态加载了驱动。再次查看当前系统设备情况,结果表明有Mega8Kbd键盘设备。rootIntel nfs#cat /proc/devicesCharacter devices: 1 mem 2 pty 3 ttyp 4 /dev/vc/0 4 tty 4 ttyS 5 /dev/tty 5 /dev/console 5 /dev/ptmx 7 vcs 10 misc 13 input 14 sound 21 sg 29 fb 81 video4linux 89 i2c 90 mtd108 ppp128 ptm136 pts161 ircomm180 usb25

26、2 Mega8ICcard253 Mega8Kbd254 pcmcia再次运行键盘测试程序:按ARM目标机上的小键盘,可以正确读取到按键值。rootIntelnfs#cd /mnt/nfs/kbd_testrootIntel kbd_test#./getkeywhich key you press is 1which key you press is 2which key you press is 36. 项目问题1、 说明本次实验中的硬件系统。2、 嵌入式Linux内核的代码构成?主要的设备驱动程序放在什么目录下?3、 说明动态加载模块的命令,卸载模块的命令,创建设备节点的命令。4、 说明内

27、核裁剪定制的方法。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-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1