嵌入式操作系统课程设计实验报告.docx
- 文档编号:151156
- 上传时间:2022-10-04
- 格式:DOCX
- 页数:16
- 大小:557.28KB
嵌入式操作系统课程设计实验报告.docx
《嵌入式操作系统课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《嵌入式操作系统课程设计实验报告.docx(16页珍藏版)》请在冰豆网上搜索。
华中科技大学
嵌入式操作系统课程设计实验报告
院系:
计算机科学与技术学院
专业:
物联网
班级:
1102
姓名:
吴斌
报告时间:
2014-06-25
计算机科学与技术学院
目录
1.课程设计目的…………………………………………………………3
2.课程设计环境搭建……………………………………………………3
3.内容一:
熟悉和理解Linux编程环境
(1)内容要求……………………………………………………………………4
(2)计过程及实现………………………………………………………………4
4.内容三:
掌握添加设备驱动程序的方法
(1)内容要求…………………………………………………………………7
(2)设计过程及实现…………………………………………………………7
5.课设感想………………………………………………………………………12
实验内容
1.课程设计目的
(1)掌握Linux操作系统的使用方法;
(2)了解Linux系统内核代码结构;
(3)掌握实例操作系统的实现方法。
2.课程设计环境搭建
(1)安装linux
(2)更改root登录:
在现阶段Ubuntu的系统中,是不允许直接以root身份登录系统的,但是在做课设的过程中,需要大量的使用root权限来进行命令的操作。
如果以普通用户登录ubuntu,会连编辑一个文件都非常周折。
为此,我找到了一种修改系统文件,以达到直接使用root身份登录的方法:
◎开始的时候,只能以普通用户登录,用Ctrl+Alt+T打开终端:
初始化/修改root密码
sudopasswdroot
用vi编辑器修改这个文件:
sudovi/etc/lightdm/lightdm.conf
在文件最后加入这么一行代码:
greeter-show-manual-login=true
然后保存退出,sudoreboot重启系统。
之后就可以输入root用户登录。
(3)在添加系统调用中用到的其他内核包:
◎下载和当前实验环境最为接近的系统版本(这点很重要)
使用apt-getinstalllinux-source-3.0.0命令,
◎下载结果是linux-source-3.0.0.tar.bz2
◎解压命令:
tar–xjvflinux-source-3.0.0.tar.bz2–C/usr/src
◎解压后,在/usr/src目录下得到内核文件夹linux-source-3.0.0
(4)在调用linux图形库时需要安装GTK环境:
◎安装gcc/g++/gdb/make等基本编程工具
apt-getinstallbuild-essential
Tip:
如果提示由于依赖项不能安装,需要使用apt的强化版aptitude,这个工具可以自动分析软件包依赖,系统一般不自带,需要先安装,具体过程是:
apt-getinstallaptitude
aptitudeinstallbuild-essential
aptitude这个工具很强大,对于解决软件包安装时的依赖问题很有帮助。
◎安装libgtk2.0-devlibglib2.0-dev等开发相关的库文件:
apt-getinstallgnome-core-devel
◎安装GTK核心组件:
apt-getinstalllibgtk2.0-dev
这个安装完成后,GTK环境就基本搭建成功,网上有些教程说要安装其他配置文件,经我亲测,发现只要安装libgtk2.0-dev这个包就能搞定。
3.熟悉和理解Linux编程环境
(1)实验内容:
实现三个进程之间的并发程序:
(2)计过程及实现:
这里需要用到课程实验时的fork()程序以及GTK的图形显示。
①基本fork()程序,调用显三个进程的结构如下:
#include
#include
#include
#include
voidmain(intargc,charargv[]){
pid_tp1,p2,p3;
pid_tt1,t2,t3;
intstatus;
if((p1=fork())==0){/*创建第一个子进程*/
execv("./pa",argv);
}
elseif((p2=fork())==0){/*创建第二个子进程*/
execv("./pb",argv);
}
elseif((p3=fork())==0){/*创建第三个子进程*/
execv("./pc",argv);
}
else{
t1=waitpid(p1,&status,0);
t2=waitpid(p2,&status,0);
t3=waitpid(p3,&status,0);
}
}
②调用GTK显示窗体函数模块的结构:
voidshow(intargc,char*argv[],char*title){
gtk_init(&argc,&argv); //初始化工具包并且获取命令行参数;
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);//创建新的窗口;
//设定窗口的位置;
gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
//监听窗口的destroy事件;
g_signal_connect(G_OBJECT(window),
"destroy",G_CALLBACK(destroy_progress),NULL);
gtk_window_set_title(GTK_WINDOW(window),title);//用来设定更改窗口标题;
gtk_container_set_border_width(GTK_CONTAINER(window),20);//设定宽度;
//使用gtk_vbox_new函数建立纵向组装盒;
//为了显示构件,必须将构件放入组装盒中,并将组装盒放在窗口内;
vbox=gtk_vbox_new(FALSE,10);
gtk_container_set_border_width(GTK_CONTAINER(vbox),100);//设定宽度;
gtk_container_add(GTK_CONTAINER(window),vbox);
gtk_widget_show(vbox);
//使用gtk_box_pack_start函数将构件放到组装盒中;
sprintf(id_char,"%s,MyID:
%d",title,getpid()); //显示PID号
label=gtk_label_new(id_char);
gtk_box_pack_start(GTK_BOX(vbox),label,FALSE,FALSE,10);
gtk_widget_show(label);
sprintf(id_char,"父进程ID:
%d",getppid()); //显示PPID号
label=gtk_label_new(id_char);
gtk_box_pack_start(GTK_BOX(vbox),label,FALSE,FALSE,10);
gtk_widget_show(label);
button=gtk_button_new_with_label("close"); //关闭窗口按钮
//信号登记函数,监听按钮的clicked事件。
//当窗口clicked时,gtk_widget_destroy就会被调用。
//而gtk_widget_destroy函数又调用gtk_main_quit()结束程序运行。
g_signal_connect_swapped(G_OBJECT(button),"clicked",G_CALLBACK(gtk_widget_destroy),window);
gtk_box_pack_start(GTK_BOX(vbox),button,FALSE,FALSE,10);
GTK_WIDGET_SET_FLAGS(button,GTK_CAN_DEFAULT);
gtk_widget_grab_default(button);
//函数显示窗口中的组件
gtk_widget_show(button);
gtk_widget_show(window);
//准备将窗口和所有的组件显示在屏幕上,函数必须在GTK程序的最后调用.
gtk_main();
}
③编译代码main.c,运行;
编译命令为:
gcc-oamain.c`pkg-config--cflags--libsgtk+-2.0`
程序运行结果如下图3-3所示:
4.内容三:
掌握添加设备驱动程序的方法
1内容要求
(1)采用模块方法,添加一个新的设备驱动程序。
(2)要求添加字符设备的驱动。
(3)编写一个应用程序,测试添加的驱动程序
2设计过程及实现
(1)Linux内核中的设备驱动程序是一组常驻内存的具有特权的共享库,是低级硬件处理例程。
对用户程序而言,设备驱动程序隐藏了设备的具体细节,对各种不同设备提供了一致的接口,一般来说是把设备映射为一个特殊的设备文件,用户程序可以象对其它文件一样对此设备文件进行操作。
Linux支持3种设备:
字符设备、块设备和网络设备。
设备由一个主设备号和一个次设备号标识。
主设备号唯一标识了设备类型,即设备驱动程序类型,它是块设备表或字符设备表中设备表项的索引。
次设备号仅由设备驱动程序解释,一般用于识别在若干可能的硬件设备中,I/O请求所涉及到的那个设备。
一个典型的驱动程序,大体上可以分为这么几个部分:
①注册设备:
在系统初启,或者模块加载时候,必须将设备登记到相应的设备数组,并返回设备的主设备号;
②定义功能函数:
对于每一个驱动函数来说,都有一些和此设备密切相关的功能函数。
以最常用的块设备或者字符设备来说,都存在着诸如open()、read()这一类的操作。
当系统调用这些调用时,将自动的使用驱动函数中特定的模块。
来实现具体的操作;
③卸载设备:
在不用这个设备时,可以将它卸载,主
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 操作系统 课程设计 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)