《linux培训.pdf》由会员分享,可在线阅读,更多相关《linux培训.pdf(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、新人培训阶段学习资料新人培训阶段学习资料上海核心信息技术有限公司上海核心信息技术有限公司VersionVersion目录课程介绍本课程旨在发现具备开发 Linux 下驱动程序的人才,新入社员将通过一个月的时间参照本教程熟悉 Linux 下设备驱动开发必须的知识。培训结束后符合要求的新人将进入公司具体项目组熟悉具体项目的开发方法。课程大纲本课程大纲内列出的任务基本由员工自己动手解决为主,通常每天上午指导人员将进行昨日实验结果评价及当日任务安排,对于工作任务不清楚的地方请及时向指导人员提出。下午主要为新员工个人实验时间。第一阶段2-3 天通过本课程的学习,使新员工能够了解 Linux 操作系统的概
2、念,熟练掌握 Linux 下的基本命令、常用工具的使用方面的知识。学习内容:公司安全保密教育,日报格式说明 Linux 常用命令,文本编辑器Vi,简单 Shell 脚本编程 嵌入式 Linux 开发环境基础:Gcc,Gdb,Make 和 MakefileGCC ARM 编译环境安装(Sourcery G+Lite Edition for ARM)软件版本管理器 Svn 嵌入式软件开发环境搭建与使用实验:1.开发环境配置,安装 ubuntu 虚拟机,熟悉 Linux 使用2.配置 X86 开发环境,编译 x86 Linux 内核,在 QEMU 下运行3.配置 ARM 开发环境,编译 arm Li
3、nux 内核,在 QEMU 下运行4.编写 Hello World 程序,在 x86/arm Linux QEMU 下运行5.编写一个脚本,统计一个目录下面所有 C 代码的行数。6.这些格式的如何去解压.tar/bz2/.Z/.zip/.rarLinux 开发基础x86 linux 内核编译versatile arm linux 内核编译QEMU 运行 linux第二阶段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 ad)一个有 10 个整型数的数组(An array of 10 integers)e)一个有 10 个指针的数组,该指针是指向一个整型数的(An array of 10 pointersf)一个指向有 10
5、 个整型数数组的指针(A pointer to an array of 10 integers)g)一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer toh)一个有 10 个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回嵌入式 C 语言编程强化pointer to an integer)to integers)a function that takes an integer as an argument and returns an integer)一个整型数(An array of ten pointers to functions that take
6、 an integer argument andreturn an integer)6.关键字 static 的作用是什么7关键字 const 是什么含意8.关键字 volatile 有什么含意 并给出三个不同的例子。9.嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量 a,写两段代码,第一个设置 a 的 bit 3,第二个清除 a 的 bit 3。在以上两个操作中,要保持其它位不变。10.嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。在某工程中,要求设置一绝对地址为 0 x67a9 的整型变量的值为 0 xaa66。编译器是一个纯粹的 ANSI 编译器。写代码去完成
7、这一任务。11.中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供一种扩展让标准C支持中断。具体所代表的事实是,产生了一个新的关键字 _interrupt。下面的代码就使用了_interrupt 关键字去定义了一个中断服务子程序(ISR),请评论一下这段代码的。_interrupt double compute_area(double radius)12.下面的代码输出是什么,为什么void foo(void)unsigned int a=6;int b=-20;(a+b 6)puts(6):puts(=3,(Y-X)的绝对值=3,保证两次置位不会重合Output更改后的寄存器值 R
8、(16 进制输出)Sample Input,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 格式)。要求对这些整数进行排序,并计算平均值,打印出排序所需的时间。#include#include#include#include void run(int*pData,int left,int right)void Qu
9、ickSort(int*pData,long Count)run(pData,0,Count-1);int i,j;int middle,iTemp;i=left;j=right;middle=pDataleft;dowhile(pDataimiddle)&(imiddle)&(jleft)if(i=j)while(i=j);if(lefti)int main(int argc,char*argv)clock_t start,end;6.3fCreateFile使用库函数,实现文件拷贝的功能获取本地时间,以字符串方式显示编写一应用程序,在程序中创建一子进程,分别在父进程和子进程中打印进程ID使
10、用 vfork 创建一子进程,分别在父进程和子进程中打印进程ID,观察父子进程的运行顺序使用 execl 函数创建一个文件编写一应用程序,在程序中创建一子进程,父进程需等待子进程运行结束后才能执行在父进程中创建一个无名管道,并创建子进程来读该管道,父进程来写该管道启动 A 进程,创建一有名管道,并向其写入一些数据;启动 B 进程,从 A 创建的有名管道中读出数据在进程中为 SIGBUS 注册处理函数,并向该进程发送SIGBUS 信号启动 A 进程,创建一共享内存,并向其写入一些数据;启动 B 进程,从 A 创建的共享内存中读出数据创建一消息队列,实现向队列中存放数据和读取数据编写应用程序,创建
11、一线程,并向该线程处理函数传递一结构编写应用程序,创建一线程,父进程需要等待该线程结束后才能继续执行编写应用程序,创建一线程,使用pthread_cleanup_push和 pthread_cleanup_pop进行退出保护编写使用 TCP 协议的服务器程序;编写使用TCP 协议的客户端程序;客户端向服务器发送字符串,服务器打印收到的字符串编写使用 UDP 协议的服务器程序;编写使用UDP 协议的客户端程序;客户端向服务器发送字符串,服务器打印收到的字符串第四阶段5 天左右熟悉 Linux 内核态和驱动开发的基本概念,通过编写一些实验程序加深理解。学习内容:进程地址空间内核地址空间Linux
12、内核链表Linux 内核定时器Linux 系统调用Proc 文件系统内核异常分析字符设备驱动驱动中的竞争与互斥ioctl 设备控制内核等待队列阻塞形字符设备驱动poll 设备方法实验:编写内核模块,在模块中使用kmalloc 分配内存并访问编写内核模块,在模块中使用页方式分配内存并访问编写内核模块,在模块中创建一链表,遍历该链表,删除链表中的结点编写内核模块,在模块中启动一定时器,5 秒钟超时,超时后任意打印一条信息修改内核,在内核中增加一个实现乘法的系统调用,编写应用程序,使用该系统调用编写内核模块,实现一可读可写的Proc 文件编写实现了读写,定位功能的字符设备驱动程序;编写应用程序,测试驱动基于上述驱动程序,加入竞争控制基于上述驱动程序,加入ioctl 的支持;设计应用程序,测试ioctl 功能基于上述驱动程序,进行读写改造,将读写实现成阻塞方式基于上述驱动程序,添加poll 设备方法;设计应用程序,测试驱动程序的poll 操作Linux 内核态及驱动开发第五阶段3 天左右本课程阶段熟悉软件开发通用流程,机能设计、概要设计、详细设计、单体测试、结合测试、集成测试。熟悉类图,交互图,状态图。软件开发流程