动态加载驱动和Linux内核移植

更新时间:2023-10-05 23:37:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

仅供个人参考

项目三:Linux内核移植

1. 能力培养目标

? 了解嵌入式Linux内核的构成 ? 掌握内核裁减定制的方法 ? 掌握内核编译的方法 ? 掌握内核烧写的方法

2. 项目任务要求

(1)项目任务

Linux内核的裁剪、编译和烧写。 (2)项目来源及应用

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

第一步,移植引导程序(Vivi、BLOB、uBoot等); 第二步,移植内核kernel;(本次实验内容) 第三步,移植根文件系统; 第四步,移植库文件,如QT库; 第五步,运行项目程序。 (3)功能需求

裁减一个可用的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)完成内核裁剪及编译好内核映像,即完成第5大项中的步骤(4)-(5)。 (4)回答以下问题

如何能够在目标机上访问宿主机上的文件? 说明使用mount命令进行文件挂载的方法。

说明mount命令执行不成功可能的原因和解决方法。 说明本实验所使用的Linux内核版本。 说明Linux内核裁减定制的方法。

4. 项目设计

4.1选择Linux内核裁减方法

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

1、make config:命令行模式,一行一行的配置,不推荐使用。 2、make menuconfig:大多人熟悉的menuconfig菜单。 3、make xconfig:基于QT图形化配置,菜单结构清晰。

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

不得用于商业用途

仅供个人参考

make menuconfig配置菜单

make xconfig配置菜单

在配置时,通常有三种选择方式: ? Y:将该功能编译进内核; ? N:不将该功能编译进内核;

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

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

不得用于商业用途

仅供个人参考 注意:对于陌生选项,请不要修改,保留默认即可。 5. 项目实施

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

实验室实验部分

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

(1)将3_kbd_test目录放到linux虚拟机的up-techpxa270cl目录下。3_kbd_test目录中的内容如下:

其中:

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

? mega8.ko为键盘等控制芯片的驱动程序,i2c-pxa.ko为i2c接口驱动; ? install_driver.sh为动态加载mega.ko和i2c-pxa.ko的脚本; ? zImage为裁剪、编译后的内核。

(2)查看ARM目标机自带内核对键盘的支持情况(通过超级终端)

查看键盘设备节点/dev/Mega8Kbd是否已经存在?No such file or directory表示不存在。

[root@Intel /]#ls /dev/Mega8Kbd ls: /dev/Mega8Kbd: No such file or directory 查看键盘驱动是否以模块形式动态加载?以下结果表示没有动态加载。

[root@Intel /]#lsmod Module Size Used by Not tainted [root@Intel /]# 查看当前系统设备中是否有Mega8Kbd设备?

[root@Intel /]#cat /proc/devices Character 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 mtd 108 ppp 128 ptm 136 pts 161 ircomm 180 usb 254 pcmcia

使用mount命令挂载,运行键盘测试程序getkey。查看getkey是否可以运行?Can't open keyboard!表示不能打开键盘设备。为防止大文件传输失败,在mount中加入参数–o intr,nolock,rsize=4096,wsize=4096

[root@Intel /]#ifconfig eth0 192.168.0.10 (些处为了后面烧写内核方便,虚拟机为服务器) [root@Intel /]#service nfs restart [root@Intel /]# mount –t nfs –o intr,nolock,rsize=4096,wsize=4096 192.168.0.10:/up-techpxa270cl /mnt/nfs [root@Intel /]#cd /mnt/nfs/3_kbd_test [root@Intel 3_kbd_test]#./getkey KBD_Open - Can't open keyboard! Can't open keyboard! KBD KEY: Bad file descriptor (3)在自带内核的基础上,动态加载键盘驱动,并测试 使用install_driver.sh脚本加载驱动程序: [root@Intel 3_kbd_test]#./install_driver.sh i2c_pxa: module license 'unspecified' taints kernel. I2C: Slave address 1 I2C: Enabling slave mode I2C: i2c-0: PXA I2C adapter I2C: Slave address 1 I2C: Enabling slave mode no PS/2 device found on PS/2 Port 0! no PS/2 device found on PS/2 Port 1! [root@Intel 3_kbd_test]# 注:如果install_driver.sh不能运行,分析原因,若是权限问题可执行命令chmod 777将该目录下的文不得用于商业用途

本文来源:https://www.bwwdw.com/article/qxpd.html

Top