嵌入式Linux实验三

合集下载

实验三 嵌入式Linux驱动(1)

实验三 嵌入式Linux驱动(1)

实验三嵌入式Linux驱动(1)一、【实验目的】1)熟悉嵌入式Linux驱动程序编写框架。

2)了解七段数码管驱动程序的工作原理,熟练掌握该驱动程序在嵌入式开发平台的移植和注册使用。

二、【实验内容】1)学习Linux驱动源代码,分析代码中各个函数模块的功能作用。

2)在宿主机上交叉编译七段数码管驱动程序,然后移植到目标机上。

3)在目标机上注册驱动程序,验证驱动的功能。

三、【实验步骤】1.了解七段数码管工作原理七段数码管是显示数字的电子元件,因为借助七个发光二极管以不同组合来显示数字,所以称为七段数码管(如图1)。

七段数码管分为共阴极和共阳极,共阳极的七段数码管的正极(或者阳极)为八个发光二极管的共有正极,其他接点为独立发光二极管的负极(或者阴极),使用者只需要把正极接电,不同的负极接地就可以控制七段数码管显示不同的数字。

共阴极的七段数码管与共阳极的只是接电的接法相反而已。

图12.开发板七段数码管电路介绍开发板上有四个七段共阴数码管,2个一组,第一组七段数码管使用系统LED_CS2作为其位选使能信号,两个数码管的段选信号分别使用数据总线的D0~D7位和D8~D15位,如图2所示。

图2第二组七段数码管使用系统LED_CS3作为其位选使能信号,两个数码管的段选信号分别使用数据总线的D0~D7位和D8~D15位,如图3所示。

图3分析可知,对七段数码管的操作主要是对其位选和段选信号的控制。

其中位选信号决定显示哪个七段数码管,段选信号决定其显示的字型信息(共阴极七段数码管段选控制信息如表1),这也是驱动程序和硬件关联的主要部分。

表13.七段数码管驱动程序分析1)添加驱动程序所需的头文件和变量:SEG_CS1和SEG_CS2就是上面硬件接口所提及的两组七段数码管的位选使能信号,LED[10]数组中保存的就是在共阴极数码管上面显示0~9的段选信号。

Seg这个结构体用于保存4个数码管即时显示的数字的段选信号。

#include <linux/module.h>#include <linux/kernel.h>#include <asm/io.h>#include <asm/uaccess.h>#include <linux/fs.h>MODULE_LICENSE("GPL");//用于声明描述内核模块的许可权限,如果不声明LICENSE,模块被加载时将收到内核被污染(kernel tainted)的警告char LED_MODULE=0;#define DEVICE_NAME "xidian_seg7"#define SEG_CS1 0x10300000#define SEG_CS2 0x10400000static char LED[10]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7F, 0x6F}; unsigned long *CS1_Address, *CS2_Address;structseg{char LED1_Val;char LED2_Val;char LED3_Val;char LED4_Val;char negative;};2)同时更新所有七段数码管驱动显示函数:CS1_address对应第一组七段数码管的位选信号,该组第一个数码管的段选信号保存在short变量的低8位,该组第二个数码管的段选信号保存在short变量的高8位。

嵌入式实验三报告

嵌入式实验三报告

实验三一、实验内容:1.熟悉开发板2.学会制作用于安装系统的SD卡等3.配置NFS服务二.步骤1.熟悉开发板结合Tiny4412用户手册第一章的Tiny4412开发板介绍熟悉开发板的构造。

2.准备工作结合Tiny4412用户手册第二章的内容,熟悉开发板的启动模式,设置超级终端,制作SD卡,linux系统烧写,使用minitools工具快速刷系统,使用USB烧写系统,使用MINItools工具烧写系统。

注意:在制作SD卡前,首先参考Tiny4412用户手册第49页,恢复SD卡到原始状态。

然后在开始按照45页的内容制作SD卡。

3.使用minicom操作开发板(串口或U转串模式)4.主机(Windows)、虚拟机(Ubuntu 终端、宿主机)、开发板之间的互ping——Bridged方式1.设置主机IP地址(有线网卡)2.虚拟机(Ubuntu 终端、宿主机)(1)编辑虚拟网络,指定有线网卡(2)设置网络适配器(3) 设置IP地址3. 将开发板连接上主机,测试互ping (1)虚拟机ping主机(Windows)(2)虚拟机ping开发板和主机(3)主机ping虚拟机和开发板(3)开发板ping主机和虚拟机(宿主机)5.配置NFS服务nfs服务,制作根文件系统时才算是真正用上它了,通过它“挂载”制作好的根文件系统。

它在嵌入式中的角色可用下图说明。

用网线将主机与开发板连接起来,主机开启nfs服务后,就可以像tftp一样传文件到开发板了。

NFS服务器安装配置实现Ubuntu 12.04与ARM文件共享实现步骤:1.服务器端:sudo apt-get install portmap2.服务器端:sudo apt-get install nfs-kernel-server3.服务器端配置:sudo gedit /etc/exports添加:/home/share 192.168.1.*(rw,sync,no_root_squash)(共享目录) (允许IP)(rw权限是可擦写,还有ro只读,sync代表数据会同步写入到内存与硬盘中,async则代表数据会先暂存于内存当中,而非直接写入硬盘,开放客户端使用root身份来操作服务器的文件系统,那么开no_root_squash才行,root_squash不允许)4.服务器端启动:sudo /etc/init.d/rpcbind restart5.服务器端启动:sudo /etc/init.d/nfs-kernel-server restart6.arm板连接时:主机:sudo ifconfig eth0 192.168.1.101 netmask 255.255.255.0arm板:ifconfig eth0 192.168.1.102 netmask 255.255.255.07.arm板上mount:mount -t nfs 192.168.1.101:/home/share /mnt/hosts(主机IP和共享目录) (arm板目录)mount上之后arm板上文件自动同步(1.出现问题:reason given by server: Permission denied解决:服务器端启动一定要sudo启动,不然启动失败,服务拒绝2.出现问题:svc: failed to register lockdv1 RPC service (errno 111).lockd_up: makeso、ck failed, error=-111mount: mounting 192.168.1.101:/home/share on /mnt/hosts failed: Connection refused则改成:mount -t nfs -o nolock 192.168.1.101:/home/share /mnt/hosts3.出现问题:mount: mounting 192.168.1.101:/home/share on /mnt/hosts failed: Device or resource busy解决:mount上之后在进行mount命令会出现此提示,设备正在运行,不用再次mount如果想再次mount可以先umount /mnt/hosts)。

浙江大学软件学院嵌入式操纵系统实验报告实验3:添加并编译Linux内核模块

浙江大学软件学院嵌入式操纵系统实验报告实验3:添加并编译Linux内核模块
rm -rf *.o *.ko *.mod.c .*.cmd .tmp_versions *.order *.symvers
实验过程设计:(10 分) 1、 建立源文件(Hello.c) 2、 写 Makefile 3、 编译源文件 4、 加载模块 insmod hello.ko 5、 观察是否成功 dmesg 可以看到系统的内核模块加载信息。 6、 卸载模块 rmmod hello.ko 7、 观察是否成功 dmesg 可以看到系统的内核模块卸载信息。
嵌入式操作系统实验报告
实验 3:添加并编译 Linux 内核模块
姓名 包子·陳 任课教师 童春洋
院系
实验地点 实验课表现
S207 出勤、表现得分 10% 操作结果得分 50%实验目的:Βιβλιοθήκη 添加并编译Linux内核模块
软件学院 指导教师 实验时间 实验报告 得分 40%
学号 2145xxxx 童春洋 2014 年 12 月 5 日星期五
static int hello_init(void) { printk(KERN_ALERT "Hello World!/n"); return 0; }
static void hello_exit(void) { printk(KERN_ALERT "Bye World!/n"); }
module_init(hello_init); module_exit(hello_exit);
实验中遇到的问题及解决方法,思考题:(5 分)
得分:
1、 在编写 Makefile 过程中,内核版本号未知。
解决方法:用 uname –a 命令查看
2、 在 Makefile 编写完毕后报语法错误

嵌入式实验三 ARM-linux文件编程

嵌入式实验三 ARM-linux文件编程

通信与信息工程学院嵌入式系统设计实验报告实验名称ARM-Linux C语言文件编程学号姓名成绩岳X 164070504XX通信与信息工程学院二〇一八年目录目录 (1)实验三ARM-LINUX C语言文件编程 (2)一、实验目的 (2)二、实验内容 (2)三、实验材料 (3)四、实验总结 (4)实验三ARM-LINUX C语言文件编程一、实验目的(1)熟练掌握linux 文件编程函数原型与使用(2)掌握vi工具使用(3)掌握Makefile文件编写(4)掌握linux下,文件编译与交叉编译方法(5)掌握使用nfs下载程序方法二、实验内容编写一个程序,在当前目录下创建用户可读写文件“hello.txt”,在其中写入“This is My Schoolnumber:[自己的学号]”,关闭该文件。

再次打开该文件,读取其中的内容并输出在屏幕上。

#include "unistd.h"#include "fcntl.h"#include "stdio.h"#include "string.h"int main(){int fd;Char buf1[]="This is our schoolnumber:\zyc:16407050424\yw:16407050425\n";char buf2_read[sizeof(buf1)];int i,d,m;fd=open("/mnt/hello.txt",O_RDWR|O_CREAT|O_APPEND,0777);/*打开、创建一个可读可写且不会被覆盖的文件,文件名是hello.txt,用户权限是可读可写可执行*/if(fd<0){printf("open file error");return -1;}printf("open file hello.txt success\n");m=write(fd,(char*)buf1,strlen(buf1));// read(fd,(char*)buf1,strlen(buf1));close(fd);fd=open("/mnt/hello.txt",O_RDONL Y,0777);if(fd<0){printf("open file error");}d=read(fd,buf2_read,sizeof(buf1));for(i=0;i<sizeof(buf1);i++){printf("%c",buf2_read[i]);}close(fd);return 0;三、实验材料电脑,UPNET2410经典实验箱,linux虚拟机;思考题1、linux如何创建设备文件;(1)手动创建:mknod命令在驱动程序insmod成功之后,通过mknod命令手动创建设备文件至/dev目录下:mknod /dev/xxx c 主设备号次设备号。

《嵌入式操作系统》实验报告

《嵌入式操作系统》实验报告

..
..
..
..
..
思考:如何能在 Linux 系统启动时,输出显示自定义的文本信息,请修改 码,完成此功能。
Linux 核启动代
..
..
..
..
..
5. 实验中遇到的问题及解决方法
在 实 验 中 遇 到 一 些 问 题 , 例 如 在 复 制 的 时 候 我 记 得 原 来 用 cp

a /tmp/linux-2.4.18-br.tar.gz
} module_init(hello_init);
module_exit(hello_exit);
..
..
..
..
..
有关驱动程序的编写规, 请参考课程教材, 本实验只在编写简单的驱动 ( 核 ) 程序并加入 到 Linux 核目录树中,使用户熟悉编译核的过程。该驱动程序是向终端输出相关程序信息。 编写好 helloworld.c 后将其拷贝到核源码树的 drivers/char/ 目录下。
obj-$(CONFIG_PPDEV)
+= ppdev.o
(4) 、运行 make menuconfig 配置核对 helloworld 程序的支持 :
[rootlocalhost linux-2.6.35.7]# make distclean [rootlocalhost linux-2.6.35.7]# make menuconfig
[rootlocalhost
/]#
cp
/UP-Magic210/SRC/kernel/linux-2.6.35.7/drivers/char/
helloworld.c
(2) 、进入实验核源码目录修改 driver/char/ 添加 helloworld 程序的菜单支持

嵌入式Linux操作系统实验3资料

嵌入式Linux操作系统实验3资料

实验3-1 Vi使用●实验目的:学会用vi编辑器●实验要求:熟练使用该节所介绍的vi创建、编辑、保存文件●实验器材:软件:1.安装了Ubunt的vmware虚拟机硬件:PC机一台●实验步骤:1. 在当前目录下键入命令vi hello.c创建名为hello.c的文上图是在命令行模式下2. 键入i进入插入模式3. 在插入模式下输入文字hello word!4. 按[Esc]键退出到命令行模式5. 按shift+;键,即:键进入底行模式6. 键入wq保存退出7. 将文件/etc/samba/smb.conf拷贝到当前目录下,下面的实验步骤是为了让大家能够熟练使用vi中的常见操作。

命令:cp /etc/samba/smb.conf ./8. 用vi打开文件smb.conf,设定显示行号,指出“ShareDefinitiongs”的所在行号在底行模式下,输入:set nu显示行号这样就可以看到“Share Definitions”所在的行为246行。

9. 将光标移动到248行命令:248G即在命令行模式下输入248shitf+g10. 复制改行以下6行内容命令:6yy11. 将光标移动到最后一行行首命令:G,即shift+g12. 粘贴复制的内容命令:p13. 删除12步粘贴的6行命令:6dd14. 撤销第13步的操作命令:u15. 查找字符串“Share Definitions”命令:/Share Definitions16. 强制退出vi,不存盘命令::q!17. 总结:对vi编辑的使用必须非常的熟练,因为vi编辑器是非常常用的。

以后编辑程序、查看文档、修改配置文件等操作都会用到,所以大家要多练习。

实验3-2 Gcc程序编译∙实验目的:学会使用gcc编译器及各种常用编译选项的使用理解库设计的功能:1)代码的封装保密 2)代码模块化设计∙实验要求:1、编写一应用程序,使用gcc进行编译,并分别使用-o,-g,-static,-o2等选项2、静态库和动态库的使用∙实验器材:软件:安装了ubunt 12.4的vmware虚拟机硬件:PC机一台∙第1题实验步骤:∙先用vi编辑hello.c文件,内容如下:int sum_int(int a, int b){return a+b;}int main(){int a=2,b=3,c;c=sum_int(a, b);printf(“sum of a and b is %d\n”,c);}gcc指令的一般格式为:gcc [选项] 要编译的文件[选项] [目标文件]例:使用gcc编译命令,编译hello.c生成可执行文件hello,并运行hello命令:#gcc hello.c –o hello上面的命令一步由.c文件生成了可执行文件,将gcc的四个编译流程:预处理、编译、汇编、链接一步完成,下面将介绍四个流程分别做了什么工作。

linux嵌入式实验报告

linux嵌入式实验报告

大连理工大学本科实验报告实验名称:嵌入式操作系统学院(系):计算机学院实验专业:计算机系班级:0703学号:学生姓名: mqlz2010年 12 月 6 日实验一:linux内核裁剪预习报告一、实验目的:1、了解Linux内核源代码的目录结构及各目录的相关内容2、了解Linux内核各配置选项内容和作用3、掌握Linux内核配置文件的作用4、握Linux内核的编译过程5、掌握将新增内核代码加入到Linux内核结构中的方法二、实验原理Linux对于计算机硬件、网络和文件系统等部件的驱动程序支持既可以放在系统内核中,也可以作为一个可加载的模块(modules)使用。

当驱动程序放在系统内核中时,Linux 假定该硬件是存在于系统中的;而作为可加载模块使用时,只有在知道该硬件存在于系统时才会作为系统内核的一部分,当 Linux 检测到硬件时,该模块才被加入到系统内核中。

三、实验步骤1、检查编译器的版本用低版本的编译器去编译高版本的内核有可能不能编译或使内核不能使用。

要查看编译器版本,可以执行命令:#gcc –v进入系统内核源代码目录。

一般系统内核的源代码放在 /usr/src/ 目录下。

用 ls –l 命令查看可能显示如下:#ls –l /usr/srcTotal 3lrwxrwxrwx 1 root root 12 May 4 14:36 >linux-2.4.20-8drwxr-xr-x 15 root root 1024 May 14 11:37drwxr-xr-x 3 root root 1024 May 4 14:38 sendmail其中、是一个链接文件,它的链接目标是指向目录,因此、cd 就是进入目录。

2、删除过时的目标文件进入 /usr/src/linux-2.4.20-8 目录,运行 make mrproper 命令以清除过时、旧的目标文件。

这是因为经过多次编译后系统会留下部分目标文件,如果没有清除干净可能造成本次编译出错。

嵌入式Linux初级实验s3c2410 中

嵌入式Linux初级实验s3c2410 中

第三篇基础实验篇本篇内容Linux设备驱动概述★LED实例★按键中断实例★数码管实例★4*4键盘实例★LCD实例★触摸屏实例★本篇目标了解Linux设备驱动的相关概念及开发基础★掌握简单字符设备驱动的程序结构及设计流程★学习嵌入式Linux中断机制及其驱动程序结构★学习数码管的显示原理及其驱动程序的设计方法★熟悉键盘驱动原理,学会为自己的系统添加键盘设备驱动程序★了解移植LCD显示设备驱动及触摸屏输入设备驱动的过程★本篇实例实例一:LED驱动及测试实例★实例二:按键中断驱动及测试实例★实例三:数码管实例★实例四:4*4键盘实例★实例五:LCD驱动移植实例★实例六:触摸屏驱动移植实例★第8章Linux设备驱动概述在前一篇中,我们介绍了开发嵌入式Linux的基本过程,本章开篇在前一篇的基础上进行设备驱动程序的开发,使得目标板上的硬件资源为板上系统所用,这也是所有设备驱动的巨大贡献。

本章将带领你走进Linux设备驱动开发的世界。

本章首先介绍的是设备驱动的作用及其分类,不同驱动程序的特点等,然后介绍驱动模块的加载和卸载方式等。

8.1 设备驱动的角色任何计算机系统的运行都是系统中软硬件相辅相成的结果,没有硬件的软件是空中楼阁,而没有软件的硬件则只是一堆的电子元器件而已。

硬件是底层基础,是所有软件得以运行的平台,程序最终会实现为硬件上的逻辑电路;软件则是具体应用的实现,根据不同的业务需求而设计。

硬件一般是固定的,软件则很灵活,可以适应各种复杂多变的应用。

从某种程度上来看,计算机系统的软硬件相互成就了对方。

但是,软硬件之间同样存在着悖论,那就是软件和硬件不应该互相渗透入对方的领地。

为尽可能快速地完成设计,应用软件工程师不想也不必关心硬件,而硬件工程师也难有足够的闲暇和能力来顾及软件。

譬如,应用软件工程师在调用套接字发送和接收数据包的时候,他不必关心网卡上的中断、寄存器、存储空间、I/O端口、片选以及其他任何硬件词汇;在使用scanf()函数获取输入的时候,他不用知道底层究竟是怎样把终端设备的操作转化成程序输入的。

实验三 嵌入式Linux驱动(2)

实验三 嵌入式Linux驱动(2)

实验三嵌入式Linux驱动(2)一、【实验目的】1)熟悉嵌入式Linux驱动程序编写框架。

2)了解16键矩阵键盘驱动程序的工作原理,熟练掌握该驱动程序在嵌入式开发平台的移植和注册使用。

二、【实验内容】1)学习Linux驱动源程序,分析代码中各个函数模块的功能作用。

2)交叉编译键盘驱动程序,将驱动程序模块拷贝到目标机上。

3)在目标板上注册驱动程序,验证驱动的功能。

三、【实验步骤】1.熟悉16键矩阵键盘工作原理矩阵键盘又称为行列式键盘,它是用4条I/O线做为行线,4条I/O线作为列线组成的键盘。

在行线和列线的每一个交叉点上,设置一个按键。

这样键盘中按键的个数是4*4个(如图1),这种行列式键盘结构能够有效的提高嵌入式系统MCU的I/O的利用率(如果采用直连式的键盘,16个按键需要16个I/O口,此举节省了8个I/O口)。

图1以图1为例,介绍一下16键矩阵键盘的工作原理,P10、P11、P12、P13作为列检测口,P14、P15、P16、P17作为行检测口。

假设按键“1”(对应于S2)被按下,找其按键的特征编码,从P10~P13输出低电平,从P14~P17输出高电平,系统读取P14~P17的状态为“0111”,其值为“70H”。

然后从P10~P13输出高电平,从P14~P17输出低电平,系统读取P10~P13的状态为“1011”,其值为“0BH”,将两次读出的P0口状态值进行逻辑或运算就得到其按键的特征编码为“7BH”。

每个按键其特征编码都不同,所以可以通过这种方法区分16个按键及其键值。

2.实验板矩阵键盘硬件电路和操作的说明实验板行扫描线分别连接与PX270的KP_MKOUT0、KP_MKOUT1、KP_MKOUT2、KP_MKOUT6端口相连,列扫描线分别与PX270的KP_MKIN0、KP_MKIN1、KP_MKIN2、KP_MKIN5端口相连。

图2PX270支持最大8根行扫描线,8根列扫描线总计64个按键的矩阵键盘,通过对键盘控制寄存器KPC的操作,我们可以自由的定制键盘的扫描工作方式,行扫描线,列扫描线的个数。

嵌入式系统实验三-按键中断实验

嵌入式系统实验三-按键中断实验

《嵌入式系统》课程实验报告学生姓名:所在班级:指导教师:记分及评价:一、实验名称按键中断实验二、实验目的通过实验掌握S3C2410X的中断控制寄存器的使用;通过实验掌握S3C2410X处理器的中断响应过程;通过实验掌握ARM处理器的中断方式和中断处理过程;通过实验掌握ARM处理器中断处理的软件编程方法。

三、实验内容编写程序,当用户在实验箱按下KEY1键或KEY2键时在中断服务子程序中将相关信息打印到串口中,显示在超级终端上。

四、实验原理在本实验平台的主板上设计了两个外部按键,电路原理图如下:EXINT0和EXINT1信号作为CPLD芯片的输入信号。

CPLD内部逻辑图:五、实验结果超级终端上显示以下信息:按下KEY1键或KEY2键,超级终端上显示以下信息。

六、练习题编写程序实现:按下KEY1或KEY2后点亮实验系统的LEDs一段时间后熄灭。

任务:按下KEY1键后LED1点亮一段时间后熄灭;按下KEY2键后点亮LED2一段时间后熄灭。

#define rCPLDIntControl (*(volatile unsigned char*)0x22600000)#define rCPLDIntStatus (*(volatile unsigned char*)0x22200000)#define rCPLDLEDADDR (*(volatile unsigned char*)0x21180000)void __irq int_int(void){unsigned char Status;int i;Status = rCPLDIntStatus;Status = ~(Status & 0x6);if(Status & 0x2){uart_printf(" Eint0 interrupt occurred.\n");rCPLDLEDADDR = (rCPLDLEDADDR | 0xFF )& 0xFE;for(i = 0; i < 100000; i++);rCPLDLEDADDR = rCPLDLEDADDR | 0xFF ;}else if(Status & 0x4){uart_printf(" EINT1 interrupt occurred.\n");rCPLDLEDADDR =(rCPLDLEDADDR | 0xFF) & 0xFD;for(i = 0; i < 100000; i++);rCPLDLEDADDR = rCPLDLEDADDR | 0xFF ;}rEINTPEND=(1<<9);ClearPending(BIT_EINT8_23);}。

嵌入式实验报告三

嵌入式实验报告三

嵌入式实验报告三一、实验目的:1.学习cygwin;2.通过上机实验,使学生验证、巩固和充实所学理论知识,加深对相关内容的理解,了解嵌入式Linux的内核布局,掌握内核配置及编译方法。

二、实验要求:1.安装cygwin及内核源码;2.配置基于S3c2410处理器的内核选项。

3.编译生成zImage。

三、问题:1.简述嵌入式开发中和体系结构相关的内核布局,说明哪些目录是在内核移植中需要重点关注的。

linux内核主要由5个模块构成:进程控制模块,内存管理模块,文件系统模块,进程间通信模块和网络接口模块。

这几个模块的相互关系如下图,虚线和虚线框表示在该版本中还未实现的:可以看到所有的模块都与进程调度有关,它们都需要依靠进程调度程序来挂起(暂停)或重新运行它们的进程。

下图是内核结构图:2.简述内核编译的步骤和对应命令的作用,说明zImage、bzImage的异同。

1.安装cygwin安装路径 d:\cygwin选择全部安装 All2.准备文件复制2.4.18 --> /tmp/edukit-2410复制 \patch --> /tmp/edukit-2410复制 --> /tmp安装交叉编译工具&设置系统环境$> cd /tmp/$> tar -P -xvjf$> ls!- armtools-linux ! !/tmp/$> source armtools-linux/$> ls /usr!- arm-linux !- !/usr/3.安装内核源码包4.tar -xvjf /tmp/edukit-2410/2.4.18 安装内核补丁patch -p1 < /tmp/edukit-2410/patch/2.4.185. 编译生成内核make xconfig或make menuconfig选择合适的配置文件或者自己进行相应的配置Make depMake zImage6. 检测生成的内核镜像是否存在 /arch/arm/bootbzImage和zImage的区别来自于保护模式代码的放置位置:1. 众所周知,内核映像包括两部分代码:实模式代码和保护模式代码,当引导装载器装载内核映像到代码段内存时,分别放置实模式代码和保护模式代码到不同的位置,然后进入实模式代码执行,实模式代码执行中转入CPU保护模式,开始执行32位保护模式代码。

嵌入式linux实验报告

嵌入式linux实验报告

嵌入式操作系统Linux实验报告专业:计算机科学与技术班级:13419011学号:1341901124姓名:武易组员:朱清宇实验一Linux下进程的创建一实验目的1.掌握Linux下进程的创建及退出操作2.了解fork、execl、wait、waitpid及之间的关系二实验内容创建进程,利用fork函数创建子进程,使其调用execl函数,退出进程后调用wait 或waitpid清理进程。

三实验过程1.进程的创建许多进程可以并发的运行同一程序,这些进程共享内存中程序正文的单一副本,但每个进程有自己的单独的数据和堆栈区。

一个进程可以在任何时刻可以执行新的程序,并且在它的生命周期中可以运行几个程序;又如,只要用户输入一条命令,shell进程就创建一个新进程。

fork函数用于在进程中创建一个新进程,新进程是子进程。

原型如下:#include<sys/types.h> /* 提供类型pid_t的定义 */#include<unistd.h> /* 提供函数的定义 */pid_t fork(void);使用fork函数得到的子进程是父进程的一个复制品,它从父进程处继承了整个进程的地址空间fork系统调用为父子进程返回不同的值,fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:✓在父进程中,fork返回新创建子进程的进程ID;✓在子进程中,fork返回0;✓如果出现错误,fork返回一个负值;用fork创建子进程后执行的是和父进程相同的程序,子进程可以通过调用exec函数以执行另一个程序。

当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程(例如其m a i n函数)开始执行。

调用e x e c并不创建新进程,进程I D并未改变,只是用另一个新程序替换了当前进程的正文、数据、堆和栈段。

e x e c函数原型execl,execlp,execle,execv,execve和execvp2.进程的退出一个进程正常终止有三种方式:由main()函数返回;调用exit()函数;调用_exit()或_Exit()函数。

实验三 嵌入式Linux开发基础

实验三  嵌入式Linux开发基础

实验三嵌入式Linux开发基础一、实验目的1、进一步熟悉vi编辑器的使用2、掌握gcc编译器的基本使用方法3、了解利用gdb调试程序的基本方法4、掌握Makefile文件的内容及编写格式,了解Makefile文件的自动生成方法二、实验设备装有Red Hat Linux 操作系统的PC机三、预备知识掌握linux的基本命令,掌握C语言的基本编程方法了解Makefile文件的基本知识四、实验内容及步骤1.熟悉VI编辑器的使用使用VI编辑器编辑下列几个函数文件:hello.hstarfun.hhello.cstar.c在使用Vi编辑器的过程中,注意使用Vi的单行和多行复制命令,练习字符串查找替换命令,删除一个字符,删除光标后整个内容命令,删除一行命令,恢复删除,保存和退出命令等命令,并尝试使用其他命令。

相关函数文件如下:starfun.h 文件内容如下:/*****starfun.h*****/#ifndef STARFUN_H#define STARFUN_H#define NUM 4int star1() {int i,j,k;for(k=1;k<=NUM;++k) {for(i=1;i<=(NUM-k);++i)printf(" ");for(j=1;j<=(2*k-1);++j)printf("*");printf("\n");}return 0;}int star2() {int i,j,k;for(k=NUMBER;k>=0;--k) {for(i=1;i<=(NUMBER-k+1);++i)printf(" ");for(j=1;j<=(2*k-1);++j)printf("*");printf("\n");}return 0;}#endifhello.h文件内容如下:/*hello.h*/#ifndef HELLO_Hvoid hello() {star1();printf("hello,my friends\n");}#endifhello.c 文件内容如下:void showhello() {hello();}star.c文件内容如下:#include "starfun.h"#include "hello.h"#include <stdio.h>int main() {star1();star2();showhello();return 0;}2.使用gcc编译器编译程序第一种方法:分步进行1).由star.c starfun.h 文件生成star.o 目标文件gcc -c star.c -o star.o2).由hello.c hello.h starfun.h生成hello.o目标文件gcc -c hello.c -o hello.o3).由hello.o star.o 生成应用程序myproggcc star.o hello.o -o myprog[root@localhost 01_hello]# ./myprog*****************************************hello,my friends第二种方法:一条命令完成以上操作gcc star.c hello.c -o myprog练习gcc中各种参数的使用,体会gcc编译器编译的过程及各选项参数的作用。

嵌入式Linux系统开发教程实验报告

嵌入式Linux系统开发教程实验报告

嵌入式实验报告姓名:学号:学院:日期:实验一熟悉嵌入式系统开发环境一、实验目的熟悉 Linux 开发环境,学会基于S3C2410 的Linux 开发环境的配置和使用。

使用Linux的armv4l-unknown-linux-gcc 编译,使用基于NFS 方式的下载调试,了解嵌入式开发的基本过程。

二、实验内容本次实验使用 Redhat Linux 9.0 操作系统环境,安装ARM-Linux 的开发库及编译器。

创建一个新目录,并在其中编写hello.c 和Makefile 文件。

学习在Linux 下的编程和编译过程,以及ARM 开发板的使用和开发环境的设置。

下载已经编译好的文件到目标开发板上运行。

三、实验设备及工具硬件::UP-TECH S2410/P270 DVP 嵌入式实验平台、PC 机Pentium 500 以上, 硬盘10G 以上。

软件:PC 机操作系统REDHAT LINUX 9.0+超级终端(或X-shell)+AMR-LINUX 开发环境。

四、实验步骤1、建立工作目录[root@localhost root]# mkdir hello[root@localhost root]# cd hello2、编写程序源代码我们可以是用下面的命令来编写hello.c的源代码,进入hello目录使用vi 命令来编辑代码:[root@localhost hello]# vi hello.c按“i”或者“a”进入编辑模式,将上面的代码录入进去,完成后按Esc 键进入命令状态,再用命令“:wq!”保存并退出。

这样我们便在当前目录下建立了一个名为hello.c的文件。

hello.c源程序:#include <stdio.h>int main() {char name[20];scanf(“%s”,name);printf(“hello %s”,name);return 0;}3、编写Makefile要使上面的hello.c程序能够运行,我们必须要编写一个Makefile文件,Makefile文件定义了一系列的规则,它指明了哪些文件需要编译,哪些文件需要先编译,哪些文件需要重新编译等等更为复杂的命令。

0442801133翟高星Linux嵌入式系统实验报告

0442801133翟高星Linux嵌入式系统实验报告

实验一:熟悉LINUX下常用命令一、实验目的1 掌握linux操作系统的安装。

2 熟练掌握linux下的常用字符命令。

二、实验设备及工具硬件:UP-NETARM2410-S嵌入式实验仪,PC机pentumn500以上, 硬盘40G以上,内存大于128M。

软件:PC机操作系统REDHAT LINUX 9.0 +MINICOM + AMRLINUX开发环境三、预备知识Linux下的常用命令:cd,mkdir,rmdir,cp,mount,ls,pwd,ps等(可参考附件内容)四、实验要求熟悉Linux下的常用命令:,并在计算机上进行练习实践五、实验内容进入系统后可以右键打开终端,进入终端后会看到:[root@tty /]#,其中第一个root表示登录用户,tty表示网络中主机名,/表示当前目录,(当登录用户,登录主机名以及进入目录不同时,相应的项也会改变)#表示登陆用户是超级用户root,如果是一般用户则为$。

1.基本命令:cd,mkdir,rmdir,cp,mount,ls,pwd,ps等(1)切换工作目录命令cd :cd /usr/bin //切换到/usr/bin目录cd .. //切换到上一层目录(2)创建目录命令mkdirmkdir AAA //在当前目录下建立一个名为AAA子目录mkdir –p BBB/CCC //BBB目录中建立CCC子目录,若BBB目录原本不存在则建立它(3)删除空目录命令rmdirrmdir AAA //蒋当前工作目录下名为AAA的子目录删除rmdir –p BBB/CCC //删除BBB目录中的子目录CCC,若删除CCC后BBB为空目录则//将BBB也同时删除(4)复制命令cpcp aaa bbb //将文件aaa复制为文件bbb(5)挂载命令mountmount –t vfat /dev/sda1 /mnt/usb //挂载U盘vfat:挂载设备的文件类型/dev/sda1:挂载设备名/mnt/usb:挂载点(6)查看目录内容命令lsls –lt s* //列出当前目录下所有名称以”s”开头的文件的详细信息(7)显示当前路经命令pwd(8)进程查看命令ps2.man编程时获取帮助如果在使用时需要查看命令的详细用法,可以使用如下命令:man command或者command --help3.取消root密码,使用passwd命令4.临时修改PC 机IP 地址ifconfig eth0 192.168.0.1155.压缩/解压缩(1)假设目录/home下有文件mm.txt,sort.txt,,要把/home下的每个文件压缩成.gz文件,命令如下:cd /homegzip *(2)将压缩文件text.zip在当前目录下解压:unzip text.zip6查找文件查找文件或目录命令findfind /usr/ -size 50k //查找usr目录下文件大小超过50k的文件7.在一个目录树中查找含有某个字符串的所有文件如寻找所有名称以test开头的文件:locate test*实验二Linux 环境下程序设计基础一、试验目的练习vi编译器的使用方法二、预备知识vi编辑器使用:VIM是Linux最基本的文本编辑工具,虽然没有图形界面编辑器那样点鼠标的简单操作,但在系统管理、服务器管理中,永远不是图形界面的编辑器能比的。

实验三linux环境C语言开发工具

实验三linux环境C语言开发工具
实验三 linux环境C语言开发工具
一、实验目的: 1、 掌握VI(VIM)的使用方法; 2、 掌握嵌入式C语言的编译方法; 3、 掌握程序的调试和执行方法。
1
实验三 linux环境C语言开发工具
二、实验要求:
1、认真阅读电子版教材,学习VI的使用方法;
2、用Vi编写一简单C语言程序;
3、编程C语言程序;
常用格式: 或: 或: gcc gcc gcc C源文件 -o 目标文件名 -o 目标文件名 C源文件
C源文件
23
编译器GCC的使用
• GCC编译选项
编译选项有总体选项、告警和出错选项、优化选项和体系结构相关选项。
只是编译不汇编,生成汇编代码
22
编译器GCC的使用
• gcc最基本的用法是∶ gcc [options] [filenames] – options:编译器所需要的编译选项 – filenames:要编译的文件名 gcc编译器的编译选项大约有100多个,其中多数我们根本就用 不到,这里只介绍其中最基本、最常用的参数。 如果 [options]选项选项,gcc就给出预设的可执行文件 a.out。(演示)
• 尝试进入vi编辑器文本模式的六种方式 • 实验一种方式后,文本输入模式下按ESC键,可以使vi编辑 器切换到命令模式下按ESC键回到命令模式下,就可以再实 验另一种方式了!
• vi编辑器处于任何模式下时(即文本输入模式和末行 模式,或者不清楚当前是什么模式),只需按ESC键即可 进入命令模式
ESC 命令模式 文本输入模式 末行模式 不清楚当前是什么模式
26
编译器GCC的使用
2、-o选项,指定输出文档名: 例:gcc -o helloworld hello.c -o意思是Output即需要指定输出的可执行文档的名称。这里的名称 为helloworld。 使用-o选项产生可执行文件过程如下图所示。

嵌入式实验报告书

嵌入式实验报告书

嵌入式linux实验报告学号:实验一:熟悉嵌入式系统开发环境一实验目的:1.熟悉嵌入式系统硬件实验平台2.掌握超级终端配置方法。

3. 掌握嵌入式系统开发环境配置,ARM-Linux下NFS服务器的配置方法4. 掌握常用的Linux下shell命令二实验设备及工具:硬件:UP-NETARM2410-S嵌入式实验仪、PC机pentumn500以上、硬盘40G以上、内存大于256M。

软件:PC机操作系统REDHAT LINUX 9.0 、MINICOM 、AMRLINUX开发环境三实验内容:(1)掌握嵌入式系统实验平台上的各类借接口的位置;(2)配置windows的超级终端,熟悉vivi的命令行,bootload、kernel、root和用户程序的介绍;(3)配置linux的终端,配置网络服、Ip地址,开发目录共享,挂载等。

四实验结果分析配置windows的超级终端输入终端名称选择COM1接口设置COM1属性打开虚拟机,启动linux。

新建终端,输入minicom启动实验箱设置ip并且在minicom下ping通主机设置网络服务取消防火墙选中NFS设置共享文件夹在主机编译运行程序hello wordHello.c 源代码如下:在target上挂载主机开发目录上嵌入式程序到实验箱,运行Mount –t nfs 主机IP:/开发目录/hostcd /host运行程序交叉编译完成实验心得:实验中应注意需要将编译的程序文件挂载到开发板,才能在ARM里找到我们需要运行的文件。

还要注意区分gcc和armv4l-unknown-linux-gcc编译器的区别。

只有用armv4l-unknown-linux-gcc编译的才能在开发板上运行。

实验二嵌入式Linux程序设计一实验目的:1.掌握嵌入式Linux软件设计方法原理2.掌握Makefile文件设计方法。

3. 熟悉Linux下静态库和共享库的设计二实验设备及工具:硬件:UP-NETARM2410-S嵌入式实验仪、PC机pentumn500以上、硬盘40G 以上、内存大于256M。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验三:文件、目录及其操作命令1实验目的通过实验掌握如Linux操作系统的基本操作2实验设备硬件:PC机一台软件:Windows98/XP/2000系统,VMware Workstation6.0,Red Hat Linux3实验内容(1)文件的复制、删除和移动命令:cp, rm, mv(2)Linux文件与目录(3)目录命令:mkdir, rmdir, cd, pwd, ls(4)链接文件与ln(5)文件与目录的权限4实验预习要求仔细阅读参考书:【1】鸟哥的Linux私房菜基础学习篇第三版,人民邮电出版社,鸟哥【2】嵌入式Linux系统开发标准教程,人民邮电出版社,华清远见嵌入式培训中心【3】嵌入式Linux应用程序开发标准教程,人民邮电出版社,华清远见嵌入式培训中心关于Linux文件与目录的部分。

5实验步骤(1)熟悉Red Hat Enterprise Linux系统。

(2)根据实验重点内容测试。

6实验重点:(1)文件的复制、删除与移动:cp, rm, mv要复制文件,请使用cp (copy) 这个命令即可。

不过,cp 这个命令的用途不仅仅于此。

除了单纯的复制之外,还可以建立连结文件(就是快捷方式),比对两文件的新旧而予以更新,以及复制整个目录等等的功能。

至于移动目录与文件,则使用mv (move),这个命令也可以直接拿来作重命名(rename) 的操作!至于(移除)删除文件,使用rm (remove) 这个命令。

cp (复制文件或目录)[root@localhost ~]# cp [-adfilprsu] 源文件(source) 目标文件(destination)[root@localhost ~]# cp [options] source1 source2 source3 .... directory选项与参数:-a:相当于-pdr 的意思,至于pdr 请参考下列说明;(常用)-d:若源文件为链接文件的属性(link file),则复制链接文件属性而非文件本身;-f :为强制(force)的意思,若目标文件已经存在则无法开启,则移除后再尝试一次;-i :若目标文件(destination)已经存在时,在覆盖时会先询问操作的进行(常用)-l :进行硬式连结(hard link)的连结文件建立,而非复制文件本身;-p:连同文件的属性一起复制过去,而非使用默认属性(备份常用);-r :递归持续复制,用于目录的复制行为;(常用)-s :复制成为符号链接文件(symbolic link),亦即快捷方式文件;-u :若destination 比source 旧,才更新destination !最后需要注意的,如果源文件有两个以上,则最后一个目标文件一定要是目录才行!范例一:用root身份,将主目录下的.bashrc 复制到/temp 下,并更名为bashrc (~代表目前用户身份所在的主文件夹)[root@localhost ~]# cp ~/.bashrc /temp/bashrc[root@localhost ~]# cp -i ~/.bashrc /temp/bashrccp: overwrite `/temp/bashrc'? n <==n不覆盖,y为覆盖说明:重复作两次操作,由于/temp 下已经存在bashrc 了,加上-i 选项后,则在覆盖前会询问使用者是否确定!可以按下n 或者y 来二次确认。

范例二:将主目录下的.bashrc和.bash_history 复制到/temp下。

[root@localhost ~]cp ~/.bashrc ~/.bash_history /temp可以将多个数据一次复制到同一目录中去,最后面一定是目录。

范例三:复制/etc/ 这个目录下的所有内容到/tmp 下[root@www tmp]# cp /etc/ /tmpcp: omitting directory `/etc' <== 如果是目录则不能直接复制,要加上-r 的选项[root@www tmp]# cp -r /etc/ /tmp-r 是可以复制目录,但是,文件与目录的权限可能会被改变。

所以,也可以利用cp –a /etc /tmp 来下执行!尤其是在备份的情况下!rm (移除文件或目录)[root@localhost ~]# rm [-fir] 文件或目录选项与参数:-f :就是force 的意思,忽略不存在的文件,不会出现警告信息;-i :互动模式,在删除前会询问使用者是否操作-r :递归删除!最常用在目录的删除了!这是非常危险的选项!!!范例一:将刚刚在cp 的范例中建立的bashrc 删除掉![root@localhost ~]# cd /temp[root@localhost tmp]# rm -i bashrcrm: remove regular file `bashrc'? y如果加上-i 的选项就会主动询问,避免删除到错误的文件!范例二:通过通配符*的帮助,将/temp下开头为bashrc的文件名通通删除:[root@localhost tmp]# rm -i bashrc*注意星号,代表的是0 到无穷多个任意字符!范例三:将cp 范例中所建立的/temp/etc/ 这个目录删除掉![root@localhost tmp]# rmdir /temp/etcrmdir: etc: Directory not empty <== 删不掉!因为这不是空的目录![root@localhost tmp]# rm -r /temp/etcrm: descend into directory `/temp/etc'? y ....(中间省略)....因为身份是root ,预先已经加入了-i 的选项,所以要一直按y 才会删除!如果不想要继续按y ,可以按下[ctrl]-c 来结束rm 的工作。

这是一种保护的操作,如果确定要删除掉此目录而不要询问,可以这样做:[root@localhost tmp]# \rm -r /temp/etc在命令前加上反斜杠,可以忽略掉alias 的指定的参数!对于删除命令(remove),要注意的是,通常在Linux系统下,为了怕文件被误删除,所以很多distributions 都已经默认加入-i 这个选项!而如果要连目录下的东西都一起删掉的话,例如子目录里面还有子目录时,那就要使用-r 这个选项了!不过,使用rm -r 这个命令之前,请千万注意,因为该目录或文件肯定会被root 删掉!因为系统不会再次询问你是否要删掉!所以那是个超级严重的命令!mv (移动文件与目录,或更名)[root@localhost ~]# mv [-fiu] source destination[root@localhost ~]# mv [options] source1 source2 source3 .... directory选项与参数:-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;-i :若目标文件(destination) 已经存在时,就会询问是否覆盖!-u :若目标文件已经存在,且source 比较新,才会更新(update)范例一:复制一文件,建立一目录,将文件移动到目录中[root@localhost ~]# cd /temp[root@localhost tmp]# cp ~/.bashrc bashrc[root@localhost tmp]# mkdir mvtest[root@localhost tmp]# mv bashrc mvtest将某个文件移动到某个目录去,就是这样做!范例二:将刚刚的目录名称更名为mvtest2[root@localhost tmp]# mv mvtest mvtest2 <== 这样就更名了!范例三:再建立两个文件,再全部移动到/temp/mvtest2 当中[root@localhost tmp]# cp ~/.bashrc bashrc1[root@localhost tmp]# cp ~/.bashrc bashrc2[root@localhost tmp]# mv bashrc1 bashrc2 mvtest2注意,如果有多个来源文件或目录,则最后一个目标文件一定是目录!这里将所有的数据移动到该目录!(2)Linux文件与目录在Linux系统中,所有的系统账号的相关信息,都是记录在/etc/passwd这个文件内。

个人的密码则是记录在/etc/shadow这个文件下。

此外,Linux所有的群组名称都纪录在/etc/group 内!这三个文件是Linux系统里面账号、密码、群组信息的集中地不能随便删除这三个文件。

Linux 文件权限概念文件的权限针对“使用者”与“群组”来设定。

尤其是当屏幕前面出现了“Permission deny”的时候,肯定是权限设定错误。

Linux文件的属性在以root的身份登入Linux之后,执行ls -al第一栏代表这个文件的类型与权限(permission):这一栏其实共有十个字符:第一个字符代表这个文件是“目录、文件或连结文件”:当为[ d ]则是目录,例如上表文件名为”.gconf”的那一行;当为[ - ]则是普通文件,例如上表文件名为”install.log”那一行;若是[ l ]则表示为连结文件(link file);若是[ b ]则表示为设备文件里面的可供储存的接口设备(可随机存取装置);若是[ c ]则表示为设备文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

接下来的字符中,以三个为一组,且均为“rwx”的三个参数的组合。

其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。

要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]。

第一组为“文件拥有者的权限”,第二组为“同群组的权限”;第三组为“其它非本群组的权限”。

例题:若有一个文件的类型与权限数据为”-rwxr-xr--”,请说明其意义为何?答:先将整个类型与权限数据分开查阅,并将十个字符整理成为如下所示:[-] [rwx] [r-x] [r--]1 234 567 8901 为:代表这个文件名为目录或文件,本例中为文件(-);234为:拥有者的权限,本例中为可读、可写、可执行(rwx);567为:同群组使用者权限,本例中为可读可执行(rx);890为:其它使用者权限,本例中为可读(r)第二栏表示有多少文件名连结到此节点(i-node):每个文件都会将他的权限与属性记录到文件系统的i-node中,目录树是使用文件名来记录,因此每个文件名就会连结到一个i-node。

相关文档
最新文档