linux培训.docx

上传人:b****6 文档编号:13872080 上传时间:2023-06-18 格式:DOCX 页数:11 大小:19.77KB
下载 相关 举报
linux培训.docx_第1页
第1页 / 共11页
linux培训.docx_第2页
第2页 / 共11页
linux培训.docx_第3页
第3页 / 共11页
linux培训.docx_第4页
第4页 / 共11页
linux培训.docx_第5页
第5页 / 共11页
linux培训.docx_第6页
第6页 / 共11页
linux培训.docx_第7页
第7页 / 共11页
linux培训.docx_第8页
第8页 / 共11页
linux培训.docx_第9页
第9页 / 共11页
linux培训.docx_第10页
第10页 / 共11页
linux培训.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

linux培训.docx

《linux培训.docx》由会员分享,可在线阅读,更多相关《linux培训.docx(11页珍藏版)》请在冰点文库上搜索。

linux培训.docx

linux培训

 

新人培训阶段学习资料

上海核心信息技术有限公司

 

Version

课程介绍

本课程旨在发现具备开发Linux下驱动程序的人才,新入社员将通过一个月的时间参照本教程熟悉Linux下设备驱动开发必须的知识。

培训结束后符合要求的新人将进入公司具体项目组熟悉具体项目的开发方法。

课程大纲

本课程大纲内列出的任务基本由员工自己动手解决为主,通常每天上午指导人员将进行昨日实验结果评价及当日任务安排,对于工作任务不清楚的地方请及时向指导人员提出。

下午主要为新员工个人实验时间。

第一阶段Linux开发基础

2-3天

通过本课程的学习,使新员工能够了解Linux操作系统的概念,熟练掌握Linux下的基本命令、常用工具的使用方面的知识。

学习内容:

◆公司安全保密教育,日报格式说明

◆Linux常用命令,文本编辑器Vi,简单Shell脚本编程

◆嵌入式Linux开发环境基础:

Gcc,Gdb,Make和Makefile

GCCARM编译环境安装(SourceryG++LiteEditionforARM)

◆软件版本管理器Svn

◆嵌入式软件开发环境搭建与使用

x86linux内核编译

versatilearmlinux内核编译

QEMU运行linux

 

实验:

1.开发环境配置,安装ubuntu虚拟机,熟悉Linux使用

2.配置X86开发环境,编译x86Linux内核,在QEMU下运行

3.配置ARM开发环境,编译armLinux内核,在QEMU下运行

4.编写HelloWorld程序,在x86/armLinuxQEMU下运行

5.编写一个脚本,统计一个目录下面所有C代码的行数。

6.这些格式的如何去解压

.tar/bz2/.Z/.zip/.rar

第二阶段嵌入式C语言编程强化

3-5天

本课程的主要目标是通过编写代码的方式,加强对于C语言编程和数据结构的掌握程度。

回答如下16道国外经典的面向嵌入式C语言面试题

1.用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)

2.写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。

3.预处理器标识#error的目的是什么

4.嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢

5.用变量a给出下面的定义

a)一个整型数(Aninteger)

b)一个指向整型数的指针(Apointertoaninteger)

c)一个指向指针的的指针,它指向的指针是指向一个整型数(Apointertoapointertoaninteger)

d)一个有10个整型数的数组(Anarrayof10integers)

e)一个有10个指针的数组,该指针是指向一个整型数的(Anarrayof10pointerstointegers)

f)一个指向有10个整型数数组的指针(Apointertoanarrayof10integers)

g)一个指向函数的指针,该函数有一个整型参数并返回一个整型数(Apointertoafunctionthattakesanintegerasanargumentandreturnsaninteger)

h)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数(Anarrayoftenpointerstofunctionsthattakeanintegerargumentandreturnaninteger)

6.关键字static的作用是什么

7.关键字const是什么含意

8.关键字volatile有什么含意并给出三个不同的例子。

9.嵌入式系统总是要用户对变量或寄存器进行位操作。

给定一个整型变量a,写两段代码,第一个设置a的bit3,第二个清除a的bit3。

在以上两个操作中,要保持其它位不变。

10.嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。

在某工程中,要求设置一绝对地址为0x67a9的整型变量的值为0xaa66。

编译器是一个纯粹的ANSI编译器。

写代码去完成这一任务。

11.中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供一种扩展—让标准C支持中断。

具体所代表的事实是,产生了一个新的关键字__interrupt。

下面的代码就使用了__interrupt关键字去定义了一个中断服务子程序(ISR),请评论一下这段代码的。

__interruptdoublecompute_area(doubleradius)

{

doublearea=PI*radius*radius;

printf("Area=%f",area);

returnarea;

}

12.下面的代码输出是什么,为什么

voidfoo(void)

{

unsignedinta=6;

intb=-20;

(a+b>6)puts(">6"):

puts("<=6");

}

13.评价下面的代码片断:

unsignedintzero=0;

unsignedintcompzero=0xFFFF;

/*1'scomplementofzero*/

不具备可移植性性

14.尽管不像非嵌入式计算机那么常见,嵌入式系统还是有从堆(heap)中动态分配内存的过程的。

那么嵌入式系统中,动态分配内存可能发生的问题是什么

char*ptr;

if((ptr=(char*)malloc(0))==NULL)

puts("Gotanullpointer");Plauger,他的解释远远超过我这里能提到的任何解释),所有回过头看一下这些杂志吧!

free

这是一个有趣的问题。

最近在我的一个同事不经意把0值传给了函数malloc,得到了一个合法的指针之后,我才想到这个问题。

这就是上面的代码,该代码的输出是“Gotavalidpointer”。

我用这个来开始讨论这样的一问题,看看被面试者是否想到库例程这样做是正确。

15.Typedef在C语言中频繁用以声明一个已经存在的数据类型的同义字。

也可以用预处理器做类似的事。

例如,思考一下下面的例子:

#definedPSstructs*

typedefstructs*tPS;

以上两种情况的意图都是要定义dPS和tPS作为一个指向结构s指针。

哪种方法更好呢(如果有的话)为什么

16.C语言同意一些令人震惊的结构,下面的结构是合法的吗,如果是它做些什么

inta=5,b=7,c;

c=a+++b;

12

编程题

◆位操作练习

Description

假设你工作在一个32位的机器上,你需要将某一个外设寄存器的第X位设置成0(最低位为第0位,最高位为第31位),将第Y位开始的连续三位设置成110(从高位到低位的顺序),而其他位保持不变。

对给定的寄存器值R,及X,Y,编程计算更改后的寄存器值R。

Input

仅一行,包括R,X,Y,以逗号","分隔,R为16进制表示的32位整数,X,Y在0-31之间且Y>=3,(Y-X)的绝对值>=3,保证两次置位不会重合

Output

更改后的寄存器值R(16进制输出)

SampleInput

0,3

SampleOutput

1234567c

voidmain()

{

intR,X,Y;

scanf("%d,%d,%d",&R,&X,&Y);

R&=~(1<

R|=6<<(Y-3);

R&=~(1<<(Y-2));

printf("theRvalueis%d",R);

}

◆排序

编写一个排序程序。

被排序的文件有8MB大小,一行一个随机整数(ASCII格式)。

要求对这些整数进行排序,并计算平均值,打印出排序所需的时间。

#include""

#include""

#include""

#include""

voidrun(int*pData,intleft,intright)

{

 

inti,j;

intmiddle,iTemp;

i=left;j=right;

middle=pData[left];

do{

while((pData[i]

i++;

while((pData[j]>middle)&&(j>left))

j--;

if(i<=j)

{

iTemp=pData[i];

pData[i]=pData[j];

pData[j]=iTemp;

i++;

j--;

}

}while(i<=j);

if(left

run(pData,left,j);

if(right>i)

run(pData,i,right);

}

voidQuickSort(int*pData,longCount)

{

run(pData,0,Count-1);

}

 

intmain(intargc,char*argv[])

{

clock_tstart,end;

6.3fCreateFile

使用库函数,实现文件拷贝的功能

获取本地时间,以字符串方式显示

编写一应用程序,在程序中创建一子进程,分别在父进程和子进程中打印进程ID

使用vfork创建一子进程,分别在父进程和子进程中打印进程ID,观察父子进程的运行顺序

使用execl函数创建一个文件

编写一应用程序,在程序中创建一子进程,父进程需等待子进程运行结束后才能执行

在父进程中创建一个无名管道,并创建子进程来读该管道,父进程来写该管道

启动A进程,创建一有名管道,并向其写入一些数据;启动B进程,从A创建的有名管道中读出数据

在进程中为SIGBUS注册处理函数,并向该进程发送SIGBUS信号

启动A进程,创建一共享内存,并向其写入一些数据;启动B进程,从A创建的共享内存中读出数据

创建一消息队列,实现向队列中存放数据和读取数据

编写应用程序,创建一线程,并向该线程处理函数传递一结构

编写应用程序,创建一线程,父进程需要等待该线程结束后才能继续执行

编写应用程序,创建一线程,使用pthread_cleanup_push和pthread_cleanup_pop进行退出保护

编写使用TCP协议的服务器程序;编写使用TCP协议的客户端程序;客户端向服务器发送字符串,服务器打印收到的字符串

编写使用UDP协议的服务器程序;编写使用UDP协议的客户端程序;客户端向服务器发送字符串,服务器打印收到的字符串

 

第四阶段Linux内核态及驱动开发

5天左右

熟悉Linux内核态和驱动开发的基本概念,通过编写一些实验程序加深理解。

学习内容:

进程地址空间

内核地址空间

Linux内核链表

Linux内核定时器

Linux系统调用

Proc文件系统

内核异常分析

字符设备驱动

驱动中的竞争与互斥

ioctl设备控制

内核等待队列

阻塞形字符设备驱动

poll设备方法

实验:

编写内核模块,在模块中使用kmalloc分配内存并访问

编写内核模块,在模块中使用页方式分配内存并访问

编写内核模块,在模块中创建一链表,遍历该链表,删除链表中的结点

编写内核模块,在模块中启动一定时器,5秒钟超时,超时后任意打印一条信息

修改内核,在内核中增加一个实现乘法的系统调用,编写应用程序,使用该系统调用

编写内核模块,实现一可读可写的Proc文件

编写实现了读写,定位功能的字符设备驱动程序;编写应用程序,测试驱动

基于上述驱动程序,加入竞争控制

基于上述驱动程序,加入ioctl的支持;设计应用程序,测试ioctl功能

基于上述驱动程序,进行读写改造,将读写实现成阻塞方式

基于上述驱动程序,添加poll设备方法;设计应用程序,测试驱动程序的poll操作

第五阶段软件开发流程

3天左右

本课程阶段熟悉软件开发通用流程,机能设计、概要设计、详细设计、单体测试、结合测试、集成测试。

熟悉类图,交互图,状态图。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2