第一篇:实验四Linux内核移植实验
合肥学院
嵌入式系统设计实验报告
(2013-2014第二学期)
专 业: 实验项目: 实验四 Linux内核移植实验
实验时间: 2014 年 5 月 12 实验成员:
_____ 指导老师: 干开峰
电子信息与电气工程系
2014年4月制
一、实验目的
1、熟悉嵌入式Linux的内核相关代码分布情况。
2、掌握Linux内核移植过程。
3、学会编译和测试Linux内核。
二、实验内容
本实验了解Linux2.6.32代码结构,基于S3C2440处理器,完成Linux2.6.32内核移植,并完成编译和在目标开发板上测试通过。
三、实验步骤
1、使用光盘自带源码默认配置Linux内核
⑴ 在光盘linux文件夹中找到linux-2.6.32.2-mini2440.tar.gz源码文件。
输入命令:#tar –jxvf linux-2.6.32.2-mini2440-20110413.tar对其进行解压。
⑵ 执行以下命令来使用缺省配置文件config_x35
输入命令#cp config_mini2440_x35.config;(注意:x35后面有个空格,然后有个“.”开头的 config)
然后执行“make menuconfig”命令,但是会出现出现缺少ncurses libraries的错误,如下图所示:
解决办法:输入sudo apt-get install libncurses5-dev 命令进行在线安装ncurses libraries服务。
安装好之后在make menuconfig一下就会出现如下图所示。
⑶ 配置内核界面,不用做任何更改,在主菜单里选择
编译内核:
#make clean #make zImage 在执行#make zImage命令时会出现如下错误:
错误:arch/arm/mach-s3c2440/mach-mini2440.c:156: error: unknown field 'sets' specified in initializer 通过网上查找资料
于是在自己的mach-mini2440.c中加入 #include 再次make zImage以下就不会出现错误了。 编译结束后,会在arch/arm/boot目录下生成linux内核映象文件:zImage ⑷ 进行zImage文件测试 首先Nor Flash启动开发板,在超级终端中选择功能号[k],用dnw下载刚刚配置的zImage镜像文件。然后再把开发板Nand Flash启动,x35触屏会出现小企鹅的图案,同时超级终端也会出现如下图所示画面: 2、官网下载源码移植 2.1 移植前准备 ⑴ 官网下载内核Linux-2.6.32.tar.bz2。新建一个工作目录s3c2440,将内核源码包拷贝至/home/linux2.6.32.2工作目录下。 ⑵ 下载yaffs2代码 官网下载cvs-root.tar.gz压缩包,拷贝至/home/linux2.6.32.2工作目录下。2.2 建立自己的目标平台 ⑴ 解压内核源码 进入linux2.6.32.2目录下执行解压命令:#tar –jxvf linux-2.6.32.tar.bz2,将内核源码进行解压。 ⑵ 进入内核目录,修改makefile,并对内核进行默认配置进行修改183行,修改: ARCH ?=arm CROSS_COMPILE ?=arm-linux- ⑶ 给内核打yaffs2文件系统的补丁 执行#tar-zxvf cvs-root.tar.ga解压命令,对cvs-root.tar.gz压缩包进行解压。 ① 修改内核fs/Kconfig 在内核fs/Kconfig文件中添加两行内容:#Patched by YAFFS Source”fs/yaffs2/Kconfig” ② 修改内核fs/Makefile 在Makefile中添加一行:ojb-$(CONFIG_YAFFS_FS)+=yaffs2/ ③ 在内核fs/目录下创建yaffs2目录 将yaffs2源码目录下的Makefile.kernel文件复制为内核fs/yaffs2/Makefile; 将yaffs2源码目录下的Kconfig文件复制到内核fs/yaffs2目录下; 将yaffs2源码目录下的*.c 和*.h文件复制到内核fs/yaffs2目录下。 ④ 修改机器码 由于Bootloader传递给Linux内核的机器号为1999,为与Bootloader传递参数一致,修改Linux内核的机器号。友善之臂已经为 mini2440 申请了自己的机器码为 1999,它位于linux-2.6.32.2/arch/arm/tools/mach_types文件中。 ⑤ 修改时钟源频率 在 mach-mini2440.c(删除原来的mach-mini2440.c,通过复制mach-smdk2440.c 得到的新的mach-mini2440.c)的第 160 行static void __init smdk2440_map_io(void)函数中,把其中的 16934400(代表原 SMDK2440 目标板上的晶振是 16.9344MHz)改为 mini2440 开发板上实际使用的 12000000(代表 mini2440 开发板上的晶振 12MHz)。 找到MACHINE_START(S3C2440, “SMDK2440”),修改为: MACHINE_START(MINI2440, “FriendlyARM Mini2440 development board”) ⑥ 从 SMDK2440 到 MINI2440 因为我们要制作自己的 mini2440平台体系,因此把 mach-mini2440.c 中所有的 smdk2440 字样改为 mini2440。 除此之外,还有一个地方需要改动,在 mini2440_machine_init(void)函数中,把 smdk_machine_init()函数调用注释掉,因为我们后面会编写自己的初始化函数,不需要调用 该函数。 2.3 定制内核配置 ⑴ 使用 Linux 官方自带的 mini2440 配置,在 Linux 源代码根目录下执行 #make mini2440_defconfig命令: ⑵ 移植 Nand 驱动并更改分区信息 进入到/home/linux2.6.32.2/linux-2.6.32.2/arch/arm/mach-s3c2440文件夹中执行: # gedit mach-mini2440.c命令: 在 mach-mini2440.c 中加入以下代码: static struct mtd_partition mini2440_default_nand_part[] = { [0] = {.name = “supervivi”,.size = 0x00040000,.offset = 0, }, [1] = {.name = “param”,.offset = 0x00040000,.size = 0x00020000, }, [2] = {.name = “Kernel”,;对应/dev/mtdblock2.offset = 0x00060000,.size = 0x00500000, }, [3] = {.name = “root”,.offset = 0x00560000,.size = 1024 * 1024 * 1024, }, [4] = {.name = “nand”,;.offset = 0x00000000,.size = 1024 * 1024 * 1024, } };static struct s3c2410_nand_set mini2440_nand_sets[] = { [0] = {.name = “NAND”,.nr_chips = 1,.nr_partitions = ARRAY_SIZE(mini2440_default_nand_part),.partitions = mini2440_default_nand_part, }, };static struct s3c2410_platform_nand mini2440_nand_info = {.tacls = 20,.twrph0 = 60,.twrph1 = 20,.nr_sets = ARRAY_SIZE(mini2440_nand_sets),.sets = mini2440_nand_sets,.ignore_unset_ecc = 1, };如下图所示: 还需要把 nand flash 设备注册到系统中,static struct platform_device *mini2440_devices[] __initdata = { &s3c_device_usb, &s3c_device_lcd, &s3c_device_wdt, &s3c_device_i2c0, &s3c_device_iis, &s3c_device_nand,;把nand flash设备添加到开发板的设备列表结构 }; ⑶ 配置和编译带 YAFFS2 支持的内核 在执行#make zImage命令时会出现如下错误: 错误:arch/arm/mach-s3c2440/mach-mini2440.c:156: error: unknown field 'sets' specified in initializer 通过网上查找资料 于是在自己的mach-mini2440.c中加入 #include 再次make zImage以下就不会出现错误了。 执行命令:#make menuconfig 要使用yaffs2文件系统,需要先配置nand flash驱动支持,在Device drivers菜单中选择MTD选项如图,并按回车进入 找到NAND Device Support选项并进入 选择Nand Flash驱动支持 返回到内核配置主菜单,并找到File systems选项进入 找到如图选项Miscellaneous filesystems并进入 找到YAFFS2支持选项,如图选择 然后 再次进入/home/linux2.6.32.2/linux-2.6.32.2/arch/arm/boot根目录中查看Image映像文件: zImage文件测试结果如下图所示: 3、移植 DM9000网卡驱动 3.1 设备资源初始化 找到linux-2.6.32.2/drivers/net/dm9000.c,头文件处添加2410相关的配置定义。如下图所示: 再填充该平台设备的资源设置,以便和DM9000网卡驱动接口配合起来,如下 3.2 调整DM9000所用的位宽寄存器 打开linux-2.6.32.2/ drivers/net/dm9000.c,添加如下图所示内容: 3.3 关于MAC地址 static int __devinit dm9000_probe(struct platform_device *pdev)函数中可以看出: 实际上到此为止DM9000就已经移植结束了。3.4 配置内核加入DM9000,并编译运行测试 在内核根目录下执行#make menuconfig 命令,开始在内核中配置网卡驱动,依次选择如下菜单项Device Drivers--->Network device support---> Ethernet(10 or 100Mbit)---> 然后执行:#make zImage 命令 最后生成arch/arm/boot/zImage文件。 使用”k”命令把它烧写到开发板,并使用默认的文件系统启动,在命令行终端运行ifconfig命令可以看到如图所示: 四、实验小结 本次实验做的是关于Linux内核移植,实验的内容多,比较复杂。在理论课中我们对Linux内核的组成部分有了了解,以及对其移植到ARM平台的流程有了一定的认识。在具体实战的时候,我们参考SMDK2440的代码,然后搭建自己的mini2440平台,最终生成内核文件zImage,,在移植Nand Flash驱动时出现了问题,最后在老师的引导下解决了问题,最后对DM9000网卡进行驱动,由于时间的原因我们对Linux内核移植只做了一部分,我们会在以后的时间进行完善。总之,实验过程中比较坎坷。 五、思考题 1、Linux内核有哪些模块组成? 答:Linux内核由进程管理、内存管理、文件系统、网络接口、进程间通信、设备驱动等模块组成。 2、简述生成内核映像文件zImage的步骤。答:(1)使用命令make config进入命令行 (2)使用make meunconfig命令进行内核裁剪 (3)使用make clean命令,清理之前生成的目标文件 (4)使用make dep命令,编译变量的依赖关系 (5)使用make zImage命令生成内核映像文件 电 子 科 技 大 学 实 验 报 告 学生姓名: 学 号: 指导教师: 实验地点: 实验时间: 一、实验室名称: Linux环境高级编程实验室 二、实验项目名称: 插件框架实验 三、实验学时: 4学时 四、实验目的: 需要说明为什么要进行本次实验 五、实验内容: PPT上的4个版本程序,以及综合练习 六、实验步骤: PPT上的4个版本程序,以及综合练习 七、总结及心得体会: 八、对本实验过程及方法、手段的改进建议: 报告评分: 指导教师签字: 实习四 图书馆利用基础及中文全文数据库 实习目的: 一、通过实习,了解馆藏书目数据库的基本原理和常用检索途径,熟练掌握查询本馆、相关高校及科研院所图书馆检索书刊信息的方法;树立信息资源共享意识,重点了解国内学术资源分布情况,掌握外文期刊联合目录的使用方法,提升独立获取外文期刊原文的信息能力。 二、了解国内中文全文数据库的收录特点及检索功能,包括电子期刊和电子图书全文数据库,重点掌握清华同方的“中文期刊全文数据库”的使用方法;了解重庆维普的“中文科技期刊数据库(全文版)”和万方数据资源系统的“数字化期刊”等全文数据库的收录范围和使用方法;了解超星数字图书馆等目前国内较常见的电子书刊资源及其常用检索途径和方法。实习题: 一、图书馆利用基础 1、查找厦门理工学院图书馆(http://lib.xmut.edu.cn/index.asp)是否收藏商业模式方面的丛书,若有,请记录你感兴趣的其中一本的书名、编者、出版地、出版社、出版年、分类号、收藏单位、索取号以及出借状态等书目信息。 2、厦门理工学院图书馆是否收藏外文的中国军事百科全书?若有,请问目前收藏有多少分册?可以在厦门理工学院图书馆几楼的哪个书库获取呢? 3、请查找与你所学专业相关的一种期刊,中外文均可,并请记录刊名、有无曾用名、出版地、创刊年、分类号、收藏单位等书目信息。 4、利用搜索引擎查找并登录以下网站,试将每个网站的主页加入“收藏夹”中,以便调用。 (1)登录“厦门理工学院图书馆”主页,浏览其馆藏书目查询功能页面,并自命题查找与你专业密切相关的图书或期刊; (2)登录并浏览“中国高等教育数字图书馆(CALIS/eduChina)”主页,从主页的“查找全国高校图书馆资料”栏目练习检索有关的图书或期刊; (3)登录并浏览“国家科技图书文献中心(NSTL)”主页,自命题练习检索相关的图书或期刊,并尝试注册新用户和密码,模拟外文原文订购过程。 二、中文期刊全文数据库 (1)通过校园网进入“万方数据资源”的主页,可以按照“学术期刊”的学科分类或者论文检索途径,找出一种与你所学专业密切相关的期刊,请尝试查阅最新一期刊载的论文全文内容。 (2)通过校园网进入“维普资讯”的主页,练习通过“快速检索”、“高级检索”、“分类检索”、“期刊导航”等途径查找自己感兴趣的学术论文,并浏览文献题录及全文内容(练习题目可自选,或参考前面题目)。在使用过程中,请思考以上三个资源站点之间有何异同。 (3)通过校园网分别登录“超星数字图书馆”、“读秀学术搜索”或“书生之家”等电子图书阅读网,浏览各网站的栏目信息,尝试查找和阅读相关专业的图书全文。 【实验报告提交】 1、作业以WORD格式完成,在同一个文档中无需分开,标明题目即可。可发送到邮箱jihuish@126.com(邮件标题请注明学号和姓名),或者提交打印稿均可。 2、作业须由自己完成,如发现有copy行为,取消实验成绩; 3、本次实验成绩记入平时成绩的10%。 《数据库原理与应用》实验报告 实验名称: 实验四 学号: 班级: 姓名: 软件工程 一、实验目的 (1)了解Oracle数据库中的用户管理,模式,权限管理和角色管理。 (2)掌握为用户分配权限的方法。 (3)了解为不同用户分配不同权限的目的及原因。 二、实验过程 1.用系统帐户sys登录数据库,分别创建数据库内部用户user_one和user_two,创建时自己为用户分配帐户口令。 create user user_one identified by 980916 default tablespace users temporary tablespace temp quota unlimited on users;create user user_two identified by 980916 default tablespace users temporary tablespace temp quota unlimited on users;/ 14 2.为了使两位用户登录数据库请为其授予相应的权限。 grant create session to user_one,user_two; 3.授予用户user_one在自己模式下创建表的权限,在任何模式下删除表的权限,授予用户user_two可以在任何模式下创建表的权限,查询任何模式下表中数据的权限和在任何模式下创建视图的权限。 grant create table,drop any table to user_one;grant create any table,select any table,create any view to user_two; / 14 4.分别用user_one和user_two登录,写出相应的SQL语句验证为其授予的权限。(如果建立的表中有主键约束,需要预先授予user_one和user_two用户create any index的权限。) grant create any index to user_one,user_two;在user_one中建表A create table a(x number,y date); 在user_two中建表B create table b(x number,y date); 在user_two中查询表A select * from user_one.a;3 / 14 从user_one中删除表B drop table user_two.b;在user_two中查询表B Select * fromb; 在user_two中建立视图VIEW_A create view view_a(x,y) as select x,y from b;/ 14 5.用系统帐户sys登录数据库,创建用户user_three,将角色权限DBA授予用户user_three,并将S、P、J、SPJ四张表导入到user_three模式下。 create user user_three identified by 980916 default tablespace users temporary tablespace temp quota unlimited on users;grant dba to user_three;/ 14 6.使用user_three登录,完成如下授权,在user_one和user_two用户下执行相应的SQL语句验证授权是否成功。 (1)把对表S的INSERT权力授予用户user_one,并允许他再将此权限授予其他用户。 grant insert on s to user_one with grant option; 在user_one中插入数据 insert into user_three.s(sno,sname,city,sphone) values('1','a','湖北',null); commit; grant insert on user_three.s to user_two;在user_two中插入数据 insert into user_three.s(sno,sname,city,sphone)6 / 14 values('2','b','湖北',null); commit; (2)用户user_two对S,P,J三个表有SELECT和INSERT权力 grant select,insert on s to user_two;grant select,insert on p to user_two;grant select,insert on j to user_two; 从user_two中查询表S select * from user_three.s;/ 14 从user_two中给表S插入数据 insert into user_three.s(sno,sname,city,sphone) values('3','c','湖北',null); commit; (3)用户user_one对SPJ表有DELETE权力,对QTY字段具有UPDATE权力。 grant delete,update(qty)on spj to user_one; 在user_one中删除sno为s1的数据 delete from user_three.spj where sno='S1'; commit;/ 14 在user_one中将sno为s2的数据的qty改为0 update user_three.spj set qty=0 where sno='S2'; commit; (4)收回user_one对S表的插入权限。 revoke insert on s from user_one; 尝试在user_one中插入数据 insert into user_three.s(sno,sname,city,sphone) values('3','d','湖北',null); commit;9 / 14 7.把对用户user_two授予的所有权限收回,只保留登录权限。(系统权限和对象权限应该分别收回) revoke select,insert on s from user_two;revoke select,insert on p from user_two;revoke select,insert on j from user_two;revoke create any index,create any table,create any view,select any table from user_two; 尝试在user_two中创建表C create table c(x number,y date);10 / 14 8.用系统帐户sys登录数据库,创建用户user_four,将角色权限DBA授予此用户,在user_four的模式下导入Sudent、Course和SC表。 create user user_four identified by 980916 default tablespace users temporary tablespace temp quota unlimited on users;grant dba to user_four;/ 14 9.使用user_four登录,创建角色STUDBA,将修改Student、Course、SC表结构的权限,插入、删除、修改和查询三张表中数据的权限授予角色STUDBA,将角色的权限授予user_one和user_two。 create role studba;grant alter,insert,delete,update,select on s to studba;grant alter,insert,delete,update,select on c to studba;grant alter,insert,delete,update,select on sc to studba;grant studba to user_one,user_two;commit;/ 14 10.对于通过STUDBA角色授予的权限,在user_one和user_two用户下执行相应的SQL语句对权限进行验证。 修改表权限验证 alter table user_four.c add collage varchar2(40);commit;select * from user_four.c; 更新数据验证 update user_four.s set major='软件工程' where major='植物保护';select * from user_four.s where major='植物保护'; 插入数据验证 / 14 insert into user_four.sc(sno,cno,grade)values(103000,300,100);commit;select * from user_four.sc where sno=103000 and cno=300; 删除数据验证 delete from user_four.sc where sno=103000 and cno=300;commit;select * from user_four.sc where sno=103000 and cno=300; 三、实验总结 / 14 南京信息工程大学实验(实习)报告 实验(实习)名称子查询实验(实习)日期得分指导教师方忠进 系 计算机专业网络工程年级三班次2姓名李海磊学号 20112346047 一.实验目的1.掌握子查询的表示。 2.进一步掌握 SQL Server 查询分析器的使用方法,加深对 SQL语言的嵌套查询语句的理解 二.实验内容 1.在数据库 EDUC 中实现一下查询: 1)求选修了高等数学的学生学号和姓名; 2)求 C1 课程的成绩高于张三的学生学号和成绩;3)求其他系中比计算机系某一学生年龄小的学生信息(即求其它系中年龄小于计算机系年龄最大者的学生); 4)求其他系中比计算机系学生年龄都小的学生信息; 5)求选修了 C2 课程的学生姓名; 6)求没有选修 C2 课程的学生姓名; 7)查询选修了全部课程的学生的姓名 8)求至少选修了学号为“S2”的学生所选修的全部课程的学生学号和姓名。 2.提高操作实验 建立“工程-零件”数据库及如下 4 个表,并输入实验数据,用 SQL 语句实现如下三个查询:1)求供应项目 j4 红色零件的供应商号及名称 2)求没有上海供应商生成的零件的项目号 3)至少使用了供应商 S5 所供应全部零件的项目号。 表结构如下: 供应商(S): 三.实验步骤(详细)第二篇:实验四
第三篇:实验四
第四篇:实验四总结报告
第五篇:实验四报告