实验一、Linux常用命令及工具【实验目的】熟悉Linux常用命令及工具的使用,特别是常用命令的关键选项及用法需要熟悉。
【实验内容】1. 在老师讲解下掌握Linux常用命令和工具的用法;2. 打开虚拟机ubuntu的Terminal,进行命令的练习和熟悉;3. 截图保存相关界面;【实验准备】1. 熟悉Ubuntu虚拟机的安装和使用。
2. 熟悉Linux常用命令和工具。
【实验报告要求】1. 分别叙述Linux常用命令、ctags+vim工具的功能和一般用法,包括常用选项。
2. 需要有实验记录。
【实验步骤】一、常用命令用法:1、对于不熟悉的命令请查看网页:/2、ls的功能及常用选项,当以长格式显示目录下的内容列表时,输出的信息从左到右依次包括文件类型、权限模式、硬连接数、所有者、组、文件大小和文件的最后修改时间、文件名等,对于文件类型和权限模式需要熟悉;3、cd的功能及常用选项:-、/、~、.、..各表示什么意思?4、mkdir、cp、mv、rm、pwd的功能及常用选项;5、chmod的功能及常用选项;6、find的功能及常用选项;7、grep的功能及常用选项;8、tar的功能及常用选项。
二、常用工具的安装和熟悉1、下载ctags-5.8.tar.gz和vim-6.4.tar.bz2文件,复制到虚拟机的root目录下,用tar解压缩,然后安装。
安装方法如下:1)进入源代码根目录执行./configure,2)然后执行make,3)编译成功后执行make install。
2、进入/opt/WXL/wxl210/linux2.6.35wxl210exp20131202路径下,运行命令:ctags –R *然后运行:vi –t WXL_hello_init就能定位到WXL_hello_init函数定义的代码处,熟悉此文档中的代码并理解。
注意Ctrl + ]和Ctrl + T的用法。
3、将vimrc文件复制到虚拟机/root目录下,改名为.vimrc。
再次进入/opt/WXL/wxl210/linux2.6.35wxl210exp20131202路径下运行:vi –t WXL_hello_init看是不是有什么不一样的地方?【实验总结】实验过程中碰到的具体问题,怎么解决的?学到了什么?实验二、uboot及uboot命令【实验目的】阅读《第六章linux系统组成和构建.ppt》中的bootloader部分,熟悉uboot 的配置和编译,掌握uboot中常用命令的用法。
特别是print、setenv、saveenv、bootm、ping及nand erase、nand read、nand write、tftp等命令;熟悉vim和ctags 的用法。
【实验内容】1. 在老师讲解下掌握uboot的配置和编译方法;2. 将pc机和实验单板连接好,并暂停在uboot状态;3. 用命令查看单板的环境变量,设置好网络相关的数据,ping pc机的ip地址显示alive状态;4. 打开tftp工具找到内核镜像文件并载入,然后在终端输入tftp命令将内核镜像传送到单板的内存;5. 用bootm命令从内存内核镜像起始地址引导内核启动;6. 熟悉nand erase、nand read和nand write命令,掌握利用nand write命令将tftp传送到单板的镜像写入nandflash中,并引导内核启动。
【实验准备】1. 熟悉uboot常用命令,掌握ubuntu虚拟机的用法;2. 熟悉tftp等工具的使用方法。
【实验报告要求】1. 详细描述在uboot下常用命令的演示及结果。
2. 利用tftp工具将内核镜像传送到单板。
3. 将单板上内存中的镜像写入nandflash中。
【实验步骤】1. 连接单板,配置好超级终端,将单板上电,在uboot启动后倒数三秒时按任意键,使单板停在uboot状态,在uboot下熟悉常用命令,并配置好单板的网络参数,使单板能正常连网。
2. 利用tftp工具将内核镜像传送到单板,并通过bootm命令正常引导内核启动。
3. 重启单板,再次用tftp将内核镜像传送至单板,然后利用nand erase和nand write命令将单板上内存中的镜像先擦除再写入nandflash中。
4. 学习uboot源码的编译方法【实验总结】实验过程中碰到的具体问题,怎么解决的?通过这次实验学到了什么?实验三、make及makefile在uboot和linux内核配置、编译中的应用【实验目的】熟悉基本的调试方法,然后熟悉make和makefile的知识,自己能编写简单的makefile文件,并读懂一般的makefile文件,通过make命令实现完成程序的编译。
【实验内容】1. 学习makefile语法规则;2. 为.c文件写它相关的makefile文件,并编译运行;3. 进一步掌握makefile中常用变量的用法。
4. 掌握uboot和linux内核的配置和编译方法。
【实验准备】1. 熟悉Linux常用命令,掌握ubuntu虚拟机的用法;2. 熟悉GCC、GDB等工具的使用方法。
【实验报告要求】1.熟悉make工具及用法;2.从看懂makefile文件开始,掌握简单的makefile写法,能看懂大部分的makefile文件;3.掌握makefile中常用变量的使用。
4.掌握uboot和linux内核的配置与编译方法。
【实验步骤】1.分析makefile(example)文件中的含义,完成src中文件的编译,运行可执行文件,思考运行结果。
(所需内容请自行下载使用)2.回忆上两周课堂内容,完成对uboot和linux内核源码的配置和编译,最后生成uboot.bin和zImage文件。
要求:修改uboot引导内核前倒数3s的时间;修改linux内核源码配置中有关ubs驱动部分,使得usb驱动不编译进内核。
3.现有7个文件分别是m.c、m.h、study.c、listen.c、visit.c、play.c、watch.c,将它们放在/home/lab-3/目录下,要求通过makefile的编写实现所有文件的编译,生成一个名为m的可执行程序。
(7个源文件见下面附录)4.将自己编译出来的uboot.bin和zImage文件烧录进开发板运行。
【实验总结】实验过程中碰到的具体问题,怎么解决的?通过这次实验学到了什么?附录:实验步骤3所需源代码:m.c:#include<sdio.h>main(){int I;printf(“please input the value of I from 1 to 5:\n”);scanf(“%d”,&i);if(i==1)visit();else if(i==2)study();else if(i==3)play();else if(i==4)watch();else if(i==5)listen();elseprintf(“nothing to do\n”);printf(“this is a wonderful day\n”);}m.h:void visit();void listen();void watch();void study();void play();study.c:void study(){printf(“study embedded system today\n”);}listen.c:void listen(){printf(“listen English today\n”);}play.c:#include<stdio.c>void today(){printf(“play football today\n”); }visit.c:#include<stdio.h>void visit(){printf(“visit friend today\n”); }watch.c:include<stdio.h>void watch(){printf(“watch TV today\n”);}实验四、内核模块.ko的实现【实验目的】熟悉vim和ctags的用法;掌握编译成内核模块的两种方法。
【实验内容】1. 将hello.c文件拷贝到内核源码目录的drivers/char/下面,采用内核编译方式,将hello.c编译成hello.ko;2. 连接好并上电启动开发板,在超级终端下,将两个.ko文件发送到开发板上,用insmod命令进行加载,用lsmod命令查看,用rmmod命令进行卸载;【实验准备】1. 熟悉vim的用法;2. 熟悉内核模块的生成及加载和卸载等。
【实验报告要求】1. 详细描述将hello.c编译成内核模块的方法。
2. 内核模块加载和卸载的过程。
【实验步骤】1. 结合实验三以及理论课堂的讲授,将hello.c编译成hello.ko;2. 连接单板,配置好secureCRT超级终端,将单板上电,然后将hello.ko发送到单板上,进行加载和卸载的实验。
附:查看已加载的内核模块、内核模块加载、卸载的方法如下:1)查看已加载的模块#lsmod2)加载模块(注意两个加载命令的区别)#insmod /lib/modules/2.6.**/***.ko#modprobe ***3)卸载模块#rmmod ***实验五、字符设备驱动调试【实验目的】熟悉vim和ctags的用法;掌握简单字符设备驱动结构;掌握在/dev下自动创建设备文件的方法并实现。
【实验内容】1.在memdev.c中加入你认为重要的相关输出信息,比如查看sizeof(struct mem_dev)的大小值,在memdev_init函数中增加相关打印信息,使得程序正常加载后能看到提示信息输出等等;printk(KERN_INFO "Hello, world!/n");system(“ls -al /etc/passwd /etc/shadow”);2. 完成“字符设备驱动实验代码.rar”中设备驱动部分和应用测试部分各自的编译,并发送到开发板上;3.在开发板上加载设备驱动的.ko文件,注意加载后输出的提示信息,成功加载后再运行应用测试程序的可执行文件,查看输出的提示信息和测试结果;(加载memdev.ko需要注意mknssod命令生成设备文件,需要注意memdev.ko的主设备号是否正常。
)4. 自学熟悉memdev.c中这行代码:module_param(mem_major, int, S_IRUGO);的作用,掌握加载的时候给static变量重新赋值的方法;Insmod memdev.ko mem_major=2505. 在memdev.c中将static mem_major = MEMDEV_MAJOR;这行修改成:static mem_major = 0;后重新编译,加载,然后用cat /proc/devices 查看设备名为memdev的字符设备的主设备号是多少;2506.在memdev.c中增加自动创建设备文件的相关代码,并编译成.ko文件,发送到开发板并加载,查看是否在/dev目录下有自动创建两个设备文件。