2022年linux嵌入式实验报告.pdf
大连理工大学本科实验报告实验名称:嵌入式操作系统学院(系):计算机学院实验专业:计算机系班级:0703学号:学生姓名: mqlz 2010 年 12 月 6 日实验一: linux内核裁剪精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 1 页,共 11 页 - - - - - - - - - - 预习报告一、实验目的 :1、 了解 Linux 内核源代码的目录结构及各目录的相关内容2、 了解 Linux 内核各配置选项内容和作用3、 掌握 Linux 内核配置文件的作用4、 握 Linux 内核的编译过程5、 掌握将新增内核代码加入到Linux 内核结构中的方法二、实验原理Linux对于计算机硬件、网络和文件系统等部件的驱动程序支持既可以放在系统内核中,也可以作为一个可加载的模块(modules)使用。当驱动程序放在系统内核中时,Linux 假定该硬件是存在于系统中的;而作为可加载模块使用时,只有在知道该硬件存在于系统时才会作为系统内核的一部分,当 Linux 检测到硬件时,该模块才被加入到系统内核中。三、实验步骤1、检查编译器的版本用低版本的编译器去编译高版本的内核有可能不能编译或使内核不能使用。要查看编译器版本,可以执行命令:#gcc v 进入系统内核源代码目录。一般系统内核的源代码放在 /usr/src/ 目录下。用 ls l 命令查看可能显示如下:#ls l /usr/src Total 3 lrwxrwxrwx 1 root root 12 May 4 14:36 linux-2.4.20-8 drwxr-xr-x 15 root root 1024 May 14 11:37 drwxr-xr-x 3 root root 1024 May 4 14:38 sendmail 其中、是一个链接文件,它的链接目标是指向目录,因此、 cd 就是进入目录。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 2 页,共 11 页 - - - - - - - - - - 2、删除过时的目标文件进入 /usr/src/linux-2.4.20-8 目录,运行 make mrproper 命令以清除过时、旧的目标文件。这是因为经过多次编译后系统会留下部分目标文件,如果没有清除干净可能造成本次编译出错。如果没有编译过或者是系统升级的新解压缩目录,则这一步骤可以省略。3、重新设置系统内核配置系统内核的目的是建立一个适合大小、满足需求的系统内核;因此,用户必须根据自己所设计系统的需要对Linux 系统支持的硬件和软件进行适当裁减,即从配置内容中选择相应的硬件类型和合适的设备驱动程序。不同的内核版本显示的配置内容有所不同,这里以 Linux 内核 2-4-20 版本为例说明。配置内容共有 35 个类别,如下表所示:编号 类别含义1Code maturity level options代码成熟级别2Loadable module support可装载模块支持3Processor type and features处理器类型与特征4General setup一般设置5Memory Technology DeviceMTD 设备支持6Parallel port support并行口支持7Plug and Play configuration即插即用支持8Block devices块设备支持9Multi-device support(RAID and LVM )多设备支持10Cryptography support密码系统支持11Networking options网络选项12Telephony Support电话支持13ATA/IDE/MFM/RLL support多种接口存储设备支持14SCSI supportSCSI设备的支持精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 3 页,共 11 页 - - - - - - - - - - 15Fusion MPT device supportFusion MPT 设备支持16IEEE 1394(FireWire )supportIEEE 1394 防火墙设备支持17I2O device supportI2O 设备支持18Network device support网络设备支持19Amateur Radio support业余无线电支持20IrDA(infrared)support红外线支持21ISDN subsystemISDN子系统22Old CD-ROM drivers (not SCSI 、not IDE )非 SCSI/IDE 接口的 CD-ROM 设备23input core support输入核心支持24Character devices字符设备25Multimedia devices多媒体设备26Crypto Hardware supportCrypto 硬件支持27File systems文件系统28Console drivers控制台驱动29Sound声卡驱动30USB supprotUSB 支持31Additional device driver support附加设备驱动支持32Bluetooth support蓝牙支持33profiling supportProfiling支持34Kernel hacking内核分析35Library routines库例程4、编译系统内核当配置完成并保存退出后就要重新编译系统内核。系统一般会在配置结束时提示要进行make dep操作。运行带有 clean 和 dep 选项的 make 文件以清除过时的目标文件并建立合适的独立性(如果要正确编译代码,必须要满足该要求)。命令为:精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 4 页,共 11 页 - - - - - - - - - - make dep make clean 如 果 没 有 出 现 错 误 提 示 , 就 可 以 运 行make zImage 命 令 , 该 命 令 将 在/usr/src/linux-2.4.20-8/arch/i386/boot 目录下生成一个全新的内核。该内核文件名称为 zImage ,使用中注意大小写。如果给内核添加了许多驱动程序或各种各样的支持,可能需要使用 make bzImage 命令,该命令可以制作出一个很大的内核映象文件,该文件可以带所有的选项进行启动。一般当编译的内核较大时系统会推荐内核命名为bzImage。如果看到类似于以下的提示信息,就表示已经完成了内核创建工作。Root device is (3,1) Boot sector xxx bytes. Setup is xxxx bytes. System is xxx kB Sync Make1:Leaving directory /usr/src/linux-2.4.20-8/arch/i386/boot 这时在 /usr/src/ 目录下生成一个 zImage 或 bzImage文件;如果没有这个文件说明编译中有错误,导致编译错误的原因可能有:内核配置有问题,应重新配置后再编译。内核源代码有问题,应尽量选用稳定的内核(版本号为偶数)版本。文件连接的问题。系统硬件的兼容性问题也可能导致内核编译失败。内核编译完成后,由于有些模块并没有编译进内核、而是通过加载的(选择“m ”) ;所以需要编译、安装模块。命令为:make modules make modules_install 重新编译内核的过程, 会花费比较多的时间; 具体的时间取决于你选择内核的大小、处理器的速度等因数。一般在嵌入式系统中内核比较精悍,编译过程会比较快;另外、如果没有运行其他的负载密集型的应用程序(如 X 图形程序),编译过程会更快。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 5 页,共 11 页 - - - - - - - - - - 5、启用新系统内核以上各个步骤完成之后, 就可以准备启用新的系统内核来工作了。如果你没有采用 GRUB或 LILO 等引导程序进行多培、配置启动,则一定要备份正在使用的系统内核。在启用新的系统内核前,作好正在使用的系统内核备份是非常重要的!一旦新系统内核崩溃,用应急启动盘进入 Linux 系统,恢复旧系统内核。制作步骤如下:cd /boot mv vmlinuz-2.4.20-8 #现有的内核更名cp /usr/src/ /boot #复制新内核到 /boot 目录如果你用 GRUB 或 LILO 配置文件启动,则要修改该文件。以文件为例default=0 timeout=10 splashimage=(hd0,1)/boot/grub/ title Red Hat Linux (2.4.20-8) root (hd0,1) kernel /boot/ ro root=LABEL=/ initrd /boot/ title WinXP rootnoverify (hd0,0) chainloader +1 第一种方案,不增加启动选项:把文件中的以下行:kernel /boot/ ro root=LABEL=/ 改为:kernel /boot/zImage ro root=LABEL=/6、试用新的内核启修改后保存文件,如果是用LILO 一定要在超级用户提示符下执行lilo 或 lilo v 命令以使配置文件生效;如果用GRUB 则无须执行命令。重启系统后则可以用 Linux 新的精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 6 页,共 11 页 - - - - - - - - - - 内核启动了。总结报告一、实验结果在另一终端中打开minicom,复位开发板,进入PPCBoot的命令行界面,执行下面两行语句SMDK2410?#setenv?bootargs?console=ttySAC0?initrd=0 x,0 x00440000?root=/dev/ram?init=/linuxrc SMDK2410?#tftp?0 x?zImage;?go?0 x 注意:?上述两行语句中的ttySAC0、0 x00440000部分,跟第一部分内核移植是不同的。?这里测试没有使用ramdisk 文件系统,原因是前面移植的文件系统不能在这个内核下使用,需要移植更高版本的busybox 才能使用。出现如下信息, 。Uncompressing?Linux.?done,?booting?version?2.6.22.5)?(arm-linux-gcc?version?#7?Sun?Sep?2?14:24:43?CST?2007 CPU:?ARM920T?revision?0?(ARMv4T),?cr=c0007177 Machine:?SMDK2410 ATAG_INITRD?is?deprecated;?please?update?your?bootloader. 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 7 页,共 11 页 - - - - - - - - - - Memory?policy:?ECC?disabled,?Data?cache?writeback CPU?S3C2410?(id?0 x) S3C2410:?core?MHz,?memory?MHz,?peripheral?MHz S3C24XX?Clocks,?(c)?2004?Simtec?Electronics表明内核能够运行在开发板上,实验成功二、实验心得Linux 内核看似佷庞大,其实对于初学者来说,我们不必学习之初就一头钻进浩如烟海的内核代码中问剑;熟练配置内核的一些常用选项,并编译出来下载到开发板中运行试用,也是迈向 Linux 系统顶峰的必行之路。本周本来想制作自己的内核镜像和根文件系统,后来发现这并非易事,最后放弃了自己制作,而选择配置开发板的内核文件,其实学习Linux 不像单片机系统,你不必从“零”代码开始,一切先从学会配置、编译、下载运行开始。几天的学习中,在老师的帮助下学到很多有用的知识收获很大。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 8 页,共 11 页 - - - - - - - - - - 实验一: linux下串口驱动开发预习报告一、实验目的 :1、学习在 linux下进行驱动设计原理2、掌握使用模块方式进行驱动开发调试的过程二、实验内容:1、编写虚拟硬件驱动程序,实验驱动的各个接口函数的实现,分析理解驱动与应用程序的交互过程。2、编写应用程序加以验证。三、 实验步骤:1、实验任务:编写一驱动,实现将用户输入的数据,顺序排序2、实验代码:# define _KERNEL_# define MODULE#include #include #include #include #include /* printk() */#include /* kmalloc() */#include /* everything. */#include /* size_t */#include #include /* O_ACCMODE */#include /* COPY_TO_USER */精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 9 页,共 11 页 - - - - - - - - - - static struct file_operations mydriver_ops=write: mydriver_write,read: mydriver_read,open: mydriver_open,release: mydriver_release,;int _init mydriver_init(void)int result;register_chrdev(demo_MAJOR,mydriver1,&mydriver_ops);if(result0) printk(register errn);return result;2.4.204l/4、动态安装(1)创建设备文件。mknod /dev/mydriver c major minor c 是指字符设备, major 是主设备号,就是在 /proc/devices里看到的。 minor 是从设备号,设置成 0 就可以了。(2)安装设备 insmod f 如果安装成功, 在/proc/devices文件中就可以看到设备mydriver ,并可以看到它的主设备号。(3)卸载设备$ rmmod mydriver 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 10 页,共 11 页 - - - - - - - - - - 总结报告一、 实验结果编写的驱动程序很好的运行,完成预定的功能二、 实验总结通过一天的实验,让我学会了很多以前没有接触过的有趣的知识进一步的掌握了linux环境下的一些shell命令和对 vi 的运用,但是在里面也遇到了一些问题,比如编完程序由于对编译工具make的掌握不够熟练又不想照搬书上的东西,所以花了很长时间在研究 make上,导致最后的实验进度落后同学很多,但是最终还是学会了写makefile 文件的方法,最后写出了一个完美的makefile文件,通过这个实验使我对linux驱动编程产生强烈的兴趣,以后的生活中linux的应用场合一定会越来越多,比如android ,如果掌握它的驱动开发对以后的工作会非常有帮助。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 11 页,共 11 页 - - - - - - - - - -