嵌入式课程设计linux,嵌入式课程设计报告
一、 基础内容
1 、Linux内核移植实验
问题回答
1. 交叉编译环境包括哪些工具,它的作用是什么?
答:GNU的交叉编译器,包括以下组件:
(1). Gcc交叉编译器,即在宿主机上开发编译目标上可运行的二进制文件;
(2). Binutils辅助工具,它是一组二进制工具程序集,包括objdump、objcopy等,能够对二进制文件进行处理;
(3). Gdb调试器,能够对执行程序进行源码或汇编级调试。
2. 简述Linux的启动过程。
答:1.加载BIOS;2.读取MBR;3.Boot
Loader;4.加载内核;5.用户层init根据inittab文件设定运行等级;6.init进程执行rc.sysinit;7.启动内核模块;8.执行不同运行级别的脚本程序;9.执行/etc/rc.d/rc.local。
2、Linux基本应用程序编写实验
问题回答
1. 简述交叉编译的基本概念,简述x86平台和ARM平台编译环境的异同;
答:通常,程序是在一台计算机上编译,然后再分布到将要使用的其他计算机上。当主机系统(运行编译器的系统)和目标系统(产生的程序将在其上运行的系统)不兼容时,该过程就叫做交叉编译。
2. 简述Makefile文件的作用和基本组成;
答:Makefile文件的作用有点类似于DOS下的批处理文件,通过编写Makefile文件,用户可以将一个很复杂的程序(可能包含上百个甚至更多的源文件或者目录)通过简单的make命令进行编译。。Makefile文件描述了整个工程的编译,连接等规则。其中包括:工程中的哪些源文件需要编译以及如何编译;需要创建那些库文件以及如何创建这些库文件、如何最后产生我们想要的可执行文件。
规则:用于说明如何生成一个或多个目标文件,
规则格式如下:
targets:
prerequisites
command
目标 依赖
命令
3. CVT-PXA270中怎样将编写的应用程序下载到Linux中,怎样在Linux中运行该程序?
答:CVT-PXA270通过NFS将主机的/tftpboot/目录挂接到目标机的/mnt/nfs目录中,因此需要将交叉编译的应用程序拷贝到主机的/tftpboot/目录。在bin文件所在目录下使用./bin文件名运行该程序。
3、
Linux驱动程序编写实验
问题回答
1. 简述Linux设备驱动程序的基本概念和编写方法;
答:在Linux中,设备驱动程序是操作系统内核和机器硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以操作普通文件一样对硬件设备进行操作。设备驱动程序是内核的一部分。编写方法:1)
包含文件;2) 模块初始化;3) 设备文件操作函数实现;4)
模块退出操作。
2. 简述Linux应用程序怎样访问设备驱动程序;
答:Linux应用程序调用Linux系统调用,Linux系统调用“调用”驱动程序中实现的文件操作集。Linux用户程序通过设备文件(又名:设备节点)来使用驱动程序操作字符设备和块设备。
二、拓展内容
6、
Linux串口通信实验
问题回答
1. 简述Linux下的串口编程;
答:1).
包含串口编程相关头文件;2). 打开串口:Linux 下串口文件是位于/dev 下,串口一为/dev/ttyS0 ,串口二为/dev/ttyS1 ,打开串口是通过使用标准的文件打开函数open操作;3). 设置串口:最基本的设置串口包括波特率设置,效验位和停止位设置。串口的设置主要是设置struct termios结构体的各成员值;4).读写串口:设置好串口之后,读写串口就很容易了,把串口当作文件读写就可以了。发送数据用write函数,读取串口数据使用文件操作read 函数读取;5). 关闭串口:关闭串口就是关闭文件,用close函数。
代码及注释如下:
#include
#include
#include
#include
#include
#include
#include
#include
#define
TRUE
1
#define
FALSE 0
int speed_arr[] = { B38400, B19200,
B9600, B4800, B2400, B1200, B300,
B38400, B19200, B9600, B4800, B2400, B1200, B300,};
int name_arr[] = {38400, 19200, 9600, 4800, 2400, 1200, 300,
38400, 19200, 9600, 4800, 2400, 1200, 300, };
void set_speed(int fd, int
speed)
{
int
i;
int
status;
struct
termios
Opt;
tcgetattr(fd,
&Opt);
for ( i=
0; i
< sizeof(speed_arr) / sizeof(int); i++)
{
if (speed
== name_arr[i])
{
tcflush(fd,
TCIOFLUSH);
cfsetispeed(&Opt, speed_arr[i]);
cfsetospeed(&Opt, speed_arr[i]);
status = tcsetattr(fd, TCSANOW, &Opt);
if (status
!= 0)
perror("tcsetattr fd1");
return;
}
tcflush(fd,TCIOFLUSH);
}
}
int set_Parity(int fd,int
databits,int stopbits,int parity)
{
struct termios options;
if ( tcgetattr(
fd,&options) != 0)
{
perror("SetupSerial
1");
return(FALSE);
}
options.c_cflag
&= ~CSIZE;
switch
(databits)
{
case 7:
options.c_cflag |= CS7;
break;
case 8:
options.c_cflag |= CS8;
break;
default:
fprintf(stderr,"Unsupported data size\n");
return (FALSE);
}
switch
(parity)
{
case 'n':
case 'N':
options.c_cflag &= ~PARENB;
options.c_iflag &= ~INPCK;
break;
case 'o':
case 'O':
options.c_cflag |= (PARODD | PARENB);
options.c_iflag |= INPCK;
break;
case 'e':
case 'E':
options.c_cflag |= PARENB;
options.c_cflag &= ~PARODD;
options.c_iflag |= INPCK;
break;
case 'S':
case 's':
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;
break;
default:
fprintf(stderr,"Unsupported parity\n");
return (FALSE);
}
switch
(stopbits)
{
case 1:
options.c_cflag &= ~CSTOPB;
break;
case 2:
options.c_cflag |= CSTOPB;
break;
default:
fprintf(stderr,"Unsupported stop bits\n");
return (FALSE);
}
if (parity !=
'n')
options.c_iflag |= INPCK;
options.c_cc[VTIME] = 150; // 15 seconds
options.c_cc[VMIN] = 0;
tcflush(fd,TCIFLUSH);
if
(tcsetattr(fd,TCSANOW,&options) != 0)
{
perror("SetupSerial 3");
return (FALSE);
}
return
(TRUE);
}
int OpenDev(char *Dev)
{
int fd = open( Dev, O_RDWR );
if (-1 == fd)
{
perror("Can't Open Serial Port");
return -1;
}
else
return fd;
}
int main(int argc, char
**argv)
{
int fd;
int nread;
char buff[512];
char *dev ="/dev/ttyS0";
fd = OpenDev(dev);
printf("please enter any data to the ttyS0, Enter key to
confirm\n");
if (fd>0)
set_speed(fd,115200);
else
{
printf("Can't Open Serial Port!\n");
exit(0);
}
if
(set_Parity(fd,8,1,'N')== FALSE)
{
printf("Set Parity Error\n");
exit(1);
}
while(1)
{
while((nread = read(fd,buff,512))>0)
{
printf("\nLen %d\n",nread);
buff[nread+1]='\0';
printf("\n%s",buff);
}
}
//close(fd);
//exit(0);
}
8、
Linux端口编程及跑马灯实验
问题回答
1. 简述如何在CVT-PXA270实验箱中对CPU特殊功能寄存器进行访问;
答:许多接口方面的实验都需要在应用程序中对CPU特殊功能寄存器或者其它IO端口进行直接访问,CVT-PXA270提供了一个通用的端口访问驱动程序-directio,通过该驱动程序,应用程序可以直接读写CPU特殊功能寄存器或者其它IO端口。
代码及注释如下:
#include
#include
#include
#include
#include
"../include/directio.h"
#define _DEBUG_ printf
int main(int argc, char
**argv)
{
int led_status = 0;
if(port_init() != 0)
{
_DEBUG_("port open error\n");
_DEBUG_("Please follow
me:\n");
_DEBUG_("
#insmod directio\n");
_DEBUG_("
#mknod /dev/directio c 199 0\n");
_DEBUG_("
#./leddemo\n");
return -1;
}
while(1)
{
_DEBUG_("led blink\n");
port_outl(0xf0005000, led_status);
led_status ^=
0xff;
sleep(1);
}
port_uninit();
}
嵌入式课程设计linux,嵌入式课程设计报告相关推荐
- 设计linux软件下载,设计制作编辑器-The LayoutEditor For Linux下载20151012 32位/64位版-西西软件下载...
The LayoutEditor For Linux是一个程序设计和编辑版面的MEMS /集成电路制造.以及它是适当的多芯片模块( MCM )来,芯片板上(芯) ,低温共烧陶瓷,没有一个功能使布局编辑 ...
- linux系统管理课程论文,linux操作系统课程论文论文.doc
linux操作系统课程论文论文 Linux操作系统课程论文 班 级: 1002 学 号: 姓 名: 2013-11-20 摘 要 本文通过对Linux操作系统和Windows操作系统各自的特点比较,分 ...
- 嵌入式课程设计linux,嵌入式系统课程设计--基于U盘的linux操作系统的构建
嵌入式系统课程设计--基于U盘的linux操作系统的构建 1 课程设计报告课程设计报告 课程名称课程名称 嵌入式系统课程设计嵌入式系统课程设计 设计题目设计题目基于基于 U盘的盘的 linux 操作系 ...
- 检索上Linux操作系统课程的教师名,Linux操作系统课程设计.docx
课 程 设 计 报 告 课程名称 Linux操作系统课程设计 指导教师 起止日期 2016-03-21 至 2016-06-13 学 院 信息与通信工程学院 专 业 电子信息工程 学生姓名 班级/学号 ...
- 视频教程-Linux系列课程(基础篇)-Linux
Linux系列课程(基础篇) 2年JavaEE开发 ,5年资深大数据开发大牛,曾就职于蓝点科技,擅长精准广告系统开发,精通Linux操作系统! 具备丰富的大数据研发和培训经验,熟练运用Hadoop和S ...
- 嵌入式linux开发课程设计,嵌入式Linux开发课程设计指导书
嵌入式Linux开发课程设计指导书 课程编码: 适应专业:计算机专业.电子信息工程专业 学时:3周(计算机专业),2周(电子信息工程专业) 学分: 3(计算机专业),2(电子信息工程专业)时间安排:分 ...
- 【嵌入式系统课程设计——纸张计数显示装置设计】
一.简介 本项目分享的是一个嵌入式系统的课程设计,老师给了多个题目供我们选择.我们组选择的题目是纸张计数显示装置设计,也是2019年全国大学生电子设计竞赛的F题. 有关这个题目的经验分享,网上已经出现 ...
- linux课程设计死锁避免,linux操作系统课程设计—车辆死锁.doc
linux操作系统课程设计-车辆死锁.doc 键入文字"操作系统原理"课程设计BX090709吴沛儒操作系统原理课程设计报告姓名吴沛儒班级BX0907学号9指导老师胡静二〇一一年十 ...
- arm linux嵌入式网络控制系统,基于ARMLinux的嵌入式网络控制系统的研究与设计
摘要: 随着计算机技术.控制技术和网络技术的蓬勃发展,嵌入式系统与网络控制系统的应用越来越广阔.当前控制系统正经历一场前所未有的变革,远程监控和智能控制成为控制系统发展的重要方向.通过嵌入式网络控制系 ...
最新文章
- python笔记九(迭代)
- MongoDB 增量备份方案
- java判断字符串是什么编码_java可供判断某字符串是什么编码的一行代码
- linux禁用root登录
- hue安装使用,集成数据库
- Spring整合MyBatis原理之Mapper接口代理对象的产生以及调用 (三)
- 如何将Python程序打包成linux可执行文件
- linux 实时显示网速工具nload
- macOS上显示隐藏文件
- 关于英文论文写作的初步总结和资料推荐
- 双系统安装的linux找不到了,双系统,安装linux时找不到硬盘!?
- yarn application -kill application_id yarn kill 超时任务脚本
- 什么是抖音SEO,抖音seo优化怎么做?抖音seo实操教程
- Pascal 过程与函数
- 不用再期待别人的认可
- python html模板引擎_flask入门2-模板引擎
- SOHO中国高管建“老鼠仓”吸钱 大企成空壳谁之责?
- 产后一定要喝生化汤吗?
- 使用Quitter自动关闭(或隐藏)Mac上的空闲应用程序
- PowerPoint如何找回隐藏的iSlide设计工具