ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:23.85KB ,
资源ID:30006495      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/30006495.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(linux培训.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

linux培训.docx

1、linux培训新人培训阶段学习资料上海核心信息技术有限公司Version 0.02 (2011.03)课程介绍本课程旨在发现具备开发Linux下驱动程序的人才,新入社员将通过一个月的时间参照本教程熟悉Linux下设备驱动开发必须的知识。培训结束后符合要求的新人将进入公司具体项目组熟悉具体项目的开发方法。课程大纲本课程大纲内列出的任务基本由员工自己动手解决为主,通常每天上午指导人员将进行昨日实验结果评价及当日任务安排,对于工作任务不清楚的地方请及时向指导人员提出。下午主要为新员工个人实验时间。第一阶段 Linux开发基础2-3天通过本课程的学习,使新员工能够了解Linux操作系统的概念,熟练掌握

2、Linux下的基本命令、常用工具的使用方面的知识。学习内容: 公司安全保密教育,日报格式说明 Linux常用命令,文本编辑器Vi,简单Shell脚本编程 嵌入式Linux开发环境基础:Gcc,Gdb,Make和Makefile GCC ARM编译环境安装(Sourcery G+ Lite Edition for ARM) 软件版本管理器Svn 嵌入式软件开发环境搭建与使用 x86 linux内核编译 versatile arm linux内核编译 QEMU运行linux实验:1. 开发环境配置,安装ubuntu虚拟机,熟悉Linux使用2. 配置X86开发环境,编译x86 Linux内核,在Q

3、EMU下运行3. 配置ARM开发环境,编译arm Linux内核,在QEMU下运行4. 编写Hello World程序,在x86/arm Linux QEMU下运行5. 编写一个脚本,统计一个目录下面所有C代码的行数。6. 这些格式的如何去解压 .tar/bz2/tar.bz2/tar.gz/tar.tar/.Z/.zip/.rar第二阶段 嵌入式C语言编程强化3-5天本课程的主要目标是通过编写代码的方式,加强对于C语言编程和数据结构的掌握程度。回答如下16道国外经典的面向嵌入式语言面试题1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)2. 写一个“标准”

4、宏MIN,这个宏输入两个参数并返回较小的一个。3. 预处理器标识#error的目的是什么?4. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?5. 用变量a给出下面的定义 a) 一个整型数(An integer) b) 一个指向整型数的指针(A pointer to an integer) c) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a pointer to an integer) d) 一个有10个整型数的数组(An array of 10 integers) e) 一个有10个指针的数组,该指针是指向一个整型数的(An array of

5、10 pointers to integers) f) 一个指向有10个整型数数组的指针(A pointer to an array of 10 integers) g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument and returns an integer) h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( An array of ten pointers to functions that take an inte

6、ger argument and return an integer )6. 关键字static的作用是什么?7关键字const是什么含意? 8. 关键字volatile有什么含意 并给出三个不同的例子。9. 嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a 的bit 3。在以上两个操作中,要保持其它位不变。10. 嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。在某工程中,要求设置一绝对地址为0x67a9的整型变量的值为0xaa66。编译器是一个纯粹的ANSI编译器。写代码去完成这一任务。11. 中断是嵌入式系统中

7、重要的组成部分,这导致了很多编译开发商提供一种扩展让标准C支持中断。具体所代表的事实是,产生了一个新的关键字 _interrupt。下面的代码就使用了_interrupt关键字去定义了一个中断服务子程序(ISR),请评论一下这段代码的。_interrupt double compute_area (double radius) double area = PI * radius * radius; printf( Area = %f, area); return area; 12 . 下面的代码输出是什么,为什么?void foo(void) unsigned int a = 6; int b

8、 = -20; (a+b 6) puts( 6) : puts(=3,(Y-X)的绝对值=3,保证两次置位不会重合Output更改后的寄存器值R(16进制输出)Sample Input12345678,0,3Sample Output1234567cvoid main()int R,X,Y;scanf(%d,%d,%d,&R,&X,&Y);R&=(1X);R|=6(Y-3);R&=(1(Y-2);printf(the R value is %d,R); 排序编写一个排序程序。被排序的文件有8MB大小,一行一个随机整数(ASCII格式)。要求对这些整数进行排序,并计算平均值,打印出排序所需的时间

9、。#include stdio.h#include stdlib.h#include math.h#include time.hvoid run(int* pData,int left,int right) int i,j; int middle,iTemp; i = left; j = right; middle = pDataleft; do while(pDataimiddle) & (imiddle) & (jleft) j-; if(i=j) iTemp = pDatai; pDatai = pDataj; pDataj = iTemp; i+; j-; while(i=j); if

10、(lefti) run(pData,i,right); void QuickSort(int* pData,long Count) run(pData,0,Count-1); int main(int argc, char* argv) clock_t start,end; / time_t a,b;char fstr20; int m_data1024; long count=0; long sum=0; long avr;long i; FILE* m_file; if(NULL= argv0)exit(1);m_file=fopen(argv0 , r); if(m_file=NULL)

11、 printf(error); exit(1); while(NULL!=fgets(fstr,20,m_file) m_datacount=atoi(fstr); count+; start=clock(); / a=time(NULL); QuickSort(m_data,count); end=clock();printf( %6.3f secondsn,(double)(end-start)/18.2); /b=time(NULL); for(i=0;i1)p-next=Create_Node(n-1);/if the node has child ,then make the ps

12、next link the next nodereturn p;/return the nodes addressvoid Delete_Node(struct Node * node)/free the all node tablesif(node-next!=NULL) Delete_Node(node-next); node-next=NULL; free(node);双向:struct MuNodeint data;struct MuNode* pre;/ Pointer to point to previous nodestruct MuNode* next; / Pointer t

13、o point to next node;struct MuNode* Create_MuNode(int n,struct MuNode* pre)struct MuNode* p=(struct MuNode*)malloc(sizeof(Node);memset(p,NULL,sizeof(Node);p-pre=pre;if(n1)p-next=Create_MuNode(n-1,p);return p;void Delete_MuNode(struct MuNode * node)if(node-next!=NULL) Delete_MuNode(node-next); node-n

14、ext=NULL; node-pre=NULL;free(node);循环链表struct Node int data;/数据域 struct Node * next;/指针域 ;struct Node* Create_CycleNode(int n, struct Node* head)/Create a Node, n means it has n child node;struct Node* p=(struct Node*)malloc(sizeof(Node);/Create a memory space for struct memset(p,NULL,sizeof(Node);/

15、set the structs value NULL;if(n1)p-next=Create_Node(n-1);/if the node has child ,then make the ps next link the next nodeelsep-next=head;return p;/return the nodes addressvoid Delete_CycleNode(struct Node * node, struct Node * head)if(node-next!=head) Delete_Node(node-next); node-next=NULL; free(nod

16、e); 队列基本操作(入队,出队)循环队列类型定义#define QueueSize 100 /应根据具体情况定义该值 typedef char DataType; /DataType的类型依赖于具体的应用 typedef struct int front; /头指针,队非空时指向队头元素 int rear; /尾指针,队非空时指向队尾元素的下一位置 int count;/计数器,记录队中元素总数 DataType dataQueueSize; CirQueue;void InitQueue(CirQueue *Q) /初始化队列Q-front=0;Q-count=0;Q-rear=0;int

17、 QueueEmpty(CirQueue *Q)return (Q-count=0)int QueueFull(CirQueue *Q)return (Q-count= QueueSize);void EnQueue(CirQueuq *Q,DataType x)if(!QueueFull(CirQueue *Q)Q-dataQ-rear= x;Q-rear=(Q-rear+1)%QueueSize;Q-count+;elseerror(The Queue is Full! now!n);DataType DeQueue(CirQueue *Q)DataType temp;if(QueueEm

18、pty(Q)Error(Queue underflow)/队空下溢temp=Q-dataQ-front;Q-count-; /队列元素个数减1 Q-front=(Q-front+1)%QueueSize; /循环意义下的头指针加1 return temp;DataType QueueFront(CirQueue *Q)if(!QueueEmpty)return QQ-front;elseerror(Queue is empty); 栈基本操作(入栈,出栈)#define DataType int #define MAXSIZE 1024 typedef struct DataType data

19、MAXSIZE; int top; SeqStack;SeqStack *Init_SeqStack()/栈初始化SeqStack *p= (SeqStack *)malloc(sizeof(SeqStack);memset(p,NULL,sizeof(SeqStack);return p;int Empty_SeqStack(SeqStack *s)/判栈空return (s-top=0);int Push_SeqStack(SeqStack *s,DataType x)/入栈if(s-topdatas-top=x;return 1elsereturn 0;int Pop_SeqStack(

20、SeqStack *s,DataType *x)/出栈if(s-top0)*x=s-datas-top;s-top-;return 1;elsereturn 0;DataType Top_SeqStack(SeqStack *s)/取栈顶元素if(s-top0)return s-datas-top;elseerror(Stack is empty); 其他编写一个自己的完全C语言版本的memset函数,并且评价这个实现的性能和可移植性。void* memset(void * source, int ch, unsigned n);)char *p=(char*) source; assert(

21、NULL!=source);while(n-)*p+=(char)c;return source; 代码风格下面是一个16x16的黑白图标: static unsigned short stopwatch【】 = 0x07c6, 0x1ff7, 0x383b, 0x600c, 0x600c, 0xc006, 0xc006, 0xdf06, 0xc106, 0xc106, 0x610c, 0x610c, 0x3838, 0x1ff0, 0x07c0, 0x0000, ; 如何修改声明,可以使之在源代码中形象地表现出图形的模样/C编程专家#define X )*2+1#define _ )*2#d

22、efine s (0static unsigned short stopwatch=s _ _ _ _ _ X X X X X _ _ _ X X _,s _ _ _ X X X X X X X X X _ X X X,s _ _ X X X _ _ _ _ _ X X X _ X X,s _ X X _ _ _ _ _ _ _ _ X X X _ _,s _ X X _ _ _ _ _ _ _ _ X X X _ _,s X X _ _ _ _ _ _ _ _ _ _ _ X X _,s X X _ _ _ _ _ _ _ _ _ _ _ X X _,s X X _ X X X X X _

23、_ _ _ _ X X _,s X X _ _ _ _ _ X _ _ _ _ _ X X _,s X X _ _ _ _ _ X _ _ _ _ _ X X _,s _ X X _ _ _ _ X _ _ _ _ X X _ _,s _ X X _ _ _ _ X _ _ _ _ X X _ _,s _ _ X X X _ _ _ _ _ X X X _ _ _,s _ _ _ X X X X X X X X X _ _ _ _,s _ _ _ _ _ X X X X X _ _ _ _ _ _,s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _,;第三阶段 Linux用户态开发5天左右熟悉Linux用户态开发的基本概念,通过编写一些实验程序加深理解。用户态编程学习内容系统调用方式访问文件库函数访问文件时间编程进程原理进程控制程序设计进程间通讯管道信号共享内存消息队列信号量多线程程序设计socket编程(TCP, UDP)Linux用户态编程实验内容:编写应用程序,创建一个可读可写的文件。程序名:CreateFile#include #include #include sys/types.

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1