版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2015.1.131.登陆时用管理员身份root登陆2.mv /mnt/OK2440/hello /usr/src 移动改名: mv prog.c test.c2.1 gcc hello.c o hello普通编译运行在Linux系统中./hello运行文件2.2 /usr/src/usr/arm/3.4.1/arm-linux-gcc hello.c o helloarm 交叉编译运行在开发板上 ./helloarm3.NFS配置ifconfig eth0 192.168.0.22 up 配置PC机IP地址 Ifconfig eth0 192.168.0.11 up 配置板子IP地址ping
2、 192.168.0.11 PC机中:service portmap restart service nfs restart 在 /etc/exports中输入/ *(rw,sync,no_root_squash)其中/代表根目录开发板中:mnt 192.168.0.11:/ /mnt表示把PC机/根目录中的文件共享到开发板的mnt文件下4. 多进程编程实验fork(分叉)新进程的系统调用#include pid_t pid;pid=fork();getpid()函数得到该进程的ID号进程的结束:1.#include void exit(int status)2.void abort(void
3、)实验程序:#include “stdio.h”#include “unistd.h”#include “sys/types.h”main()pid_t pid;pid=fork();if(pid0)printf(“fork is wrongn”);exit(1);else if(pid=0)while(1)printf(“the child process is running now.pid=%dn”,getpid();sleep(1);elsewhile(1)printf(“the perent process is running now.pid=%dn”,getpid();sleep
4、(1);return 0;5.改变文件属性chmod 777 文件名chmod x+r+w 文件名6.创建文件夹mkdir test2015/1/141.进程和线程:进程是系统资源管理的最小单位,线程是程序执行的最小单位,线程和进程十分相似,不同的只是线程比进程小。线程和进程的最大区别在于线程完全共享相同的地址空间,运行在同一地址上。2.实验程序:#include #include #include #include “pthread.h”thread1()while(1)printf(“I am the threadn”);sleep(1);main()int ret;pthread_t i
5、d;ret=pthread_create(&id,NULL,(void*)thread1,NULL);/线程生成函数if(ret!=0)printf(“thread1 create errorn”);exit(1);while(1)printf(“I am the main-threadn”);sleep(1);编译线程程序:gcc thread.c o thread lpthread3.Linux下进程间通信的几种主要手段:管道及有名管道。信号。报文队列(消息队列)。共享内存。信号量。套接口。主要是共享内存和信号量。4.共享内存(1)创建与打开#include #include #inclu
6、de int shmget(key_t key , int size,int flag)参数说明:key:表示所创建或打开的共享内存的键size:表示共享内存区域的大小,指再创建一个新的共享内存时生效flag:表示调用函数的操作类型,也可用于设置共享内存的访问权限,两者通过逻辑或表示。shmget()不仅可以创建一个新的共享内存,也可以用于打开一个已存在的共享内存。(2)附加#include #include #include void *shmat (int shmid , void * addr , int flag)参数说明:shmid:表示要附加的共享内存段的引用表示符flag:表示s
7、hmat函数的操作方式addr和flag共同决定共享内存区域要放附加到的地址值,相应约定(3)分离int shmdt(void *addr)此函数仅用于将共享内存区域与进程的地址空间分离,并不删除共享内存本身。addr为要分离的共享内存区域的指针。(4)共享内存的控制int shmctl(int shmid , int cmd ,shmid_ds *buf)参数说明:shmid为共享内存的引用标示符 buf是指向shmid_ds结构体的指针5. 信号量信号量是一种用于多个进程访问共享资源进行控制的机制。每个信号量集都有一个与其相对应的结构,其中记录了信号量集的各种信息,该结构定义如下:stru
8、ct semid_dssem结构记录了一个信号量的信息,其定义如下:struct sem(1) 信号量集的创建与打开#include #include #include int semget(key_t key , int nsems , int semflg);函数semget用于创建一个新的信号量集或打开一个已存在的信号量集。参数说明:key:要创建或要打开的信号量集的键nsems:要创建或者要访问的信号量集中信号量的数目semflg:指定不同的选项和权限位的标志。(2) 对信号量的操作int semop(int semid,struct sembuf semoparray,unsigne
9、d nsops);参数说明:semid:信号量集的引用IDsemoparray:是一个sembuf结构数组,sembuf结构用于指定用于semop函数所做操作,数组semoparray元素的个数由参数nops指出。(3) 信号量的控制int semctl(int semid, int semnum ,int cmd ,union semun arg)参数说明:semid为信号量集的引用标示符 semnum指明某个特定信号量 cmd表示抵用该函数希望执行的 操作 arg是semun的联合,该联合定义如下:union semunint val;struct semid_ds *buf;ushort
10、 array;2015/1/15实验十五:网络编程实验:服务器与客户机实验十六:Makefile编程实验make:取代gcc编译多个c文件当运行make命令时,便会按着makefile提供的命令及顺序来完成编译实验十八:字符驱动编程实验Module形式驱动命令:insmod和modprobe1. 加载:根据设备ID或/dev目录下的设备文件2. 驱动module的初始化int (*open)(struct inode *inode, struct file *filp)ssize_t read(struct file *filp,char _user *buf,size_t count, lo
11、ff_t *f_pos)LED,BELL控制:配置寄存器控制输入输出,数据寄存器控制高低电平。LED驱动:对led对应的GPIO口进行操作的函数,还包括设备操作的结构体盘1第一讲:1.Linux基础安装历史GNURichard StallmanGNU项目Linux的出现桌面、服务器Linux的开发模式:集市式的自由开发模式和大教堂式的开发模式2.Linux指的是什么Linux仅仅是一个内核,Linux以GNU为主提供了许多开源的工具采用shell命令行的管理节省了CPU一部分资源,稳定性,性能和效率3. Linux的基本目录bin:系统常用命令工具dev:系统设备目录home:系统主目录=do
12、cument and settinglost+found:磁盘碎片文件proc:系统进程的镜像sbin:系统管理员常用命令tmp:系统临时文件boot:系统内核启动文件etc:保存当前系统配置信息lib:动态链接库库mnt:光驱软盘usr:应用程序opt:大型程序的安装目录文件系统的基本管理:三个基本命令:fdisk(内置命令)fdisk /dev/sda其中sda为设备mkfs建立文件系统(格式化)参数:-t指定要建立何种文件系统-V 显示简要的使用方法mkfs V t msdos c /dev/hda5fsck检查与修复linux档案系统,可以同时检查一个或多个档案系统fsck t msd
13、os a /dev/hda5把所有硬件设备理解为文件把内存格式化:cd devls ram*(显示所有为内存的文件)mkfs -text3ram15cd mntmkdir memlmount /dev/ram15 mnt/meml学用文件管理命令cp拷贝echo “this is test file”test.log建立文件test.log内容为this is test fileecho “this is test file”test.log建立两行相同内容文件more test.log查看文件内容cp test.log test.log.bakmv test.log.bak test.log
14、.bak.mv改名ln s test.log test.log.ln 建立连接(软连接)ls lln test.log test.log.ln.2(硬连接占空间)mkdir p 111/222/333建立一连串子目录man mkdir查找帮助rm rf test.log删除文件和目录du h显示当前目录占用硬盘空间大小df h 显示当前分区占用硬盘空间M单位whereis ls查找文件位置find命令详解:查找/tmp子目录下至少7天没访问过的文件find /tmp atime 7 print(print打印出来目录)查找/usr/src子目录中名字为core的文件并删除它们find /usr
15、/src name core exec rm ;查找/home中以.jpg结尾并且长度超过100K的文件find /home name “*.jpg” size 100ktar命令详解:(打包)tar cvfz test.tar.gz *(*为当前目录,即压缩包包含当前目录)(压缩)tar xvfz *.gz (解压缩)(c:建立一个新的文档,v:操作过程中显示流程信息,f:定义文档所在文件的名字,z:假设该文件已经使用gzip进行压缩)进程管理ps:STAT 进程的状态:S进程休眠中R CPU正在处理的进程D不可中断休眠状态Z“昏迷进程”T 正在被纠错程序跟踪或者已经被终止的进程ps aux
16、列出当前系统中所有的进程信息ps aux|grep rpc查找包含rpc的进程ps aux|wc -l统计出有多少个进程在运行ls l|wc l统计多少个目录ps aux|more查看进程top交互列出进程清单命令top进去后按k杀掉进程PID号输入9中断信号,15终止信号向某个进程发送消息命令killkill 2059(kill -9 2059比较有把握)uame a将当前Linux版本信息显示出来su 超级用户su chu888用户管理/home/etc/passwd/etc/shadow密码/etc/group硬件操作系统GUI/CLI(shell)人useradd命令chmod cho
17、wn命令ls l ping(显示-resr(s位权限)SUID(s代表执行时改为root用户权限,用完回到原来身份)chmod 4777 mkdir(赋予mkdir给s位)ls l mkdirr读w写x可执行2015/1/161. I结点MBR启动块启动操作系统格式化:mkfs.ext3 b 1024 /dev/ram3(格式.ext3,大小1024)多少个数据块为一个结点mkfs.ext3 b 1024 i 1024 /dev/ram3(1024个字节(数据块)1024个结点)tune2fs l /dev/ram3查看结点数和数据块(查看详细信息)mkfs(两个tab键显示所有搭配)mkfs
18、.ext3 b 1024 i 8196 m 2 /dev/ram4(保留%2的空间以防止硬盘空间被填满)cd .返回上级目录tune2fs j /dev/ram3增加日志功能umount /mnt/mem1卸载掉fstab的内容cd /etcmore fstab磁盘配额:修改/etc/fstab来启动每一个文件系统的配额vi fstab(系统管理员)/home ext3 defaults,usrquota,grpquota(用户级别和组级别限制)rebootmount lquotaoff a关闭quotacheck ug /homecd /homels有用户和组的磁盘quotaon a(打开磁
19、盘限额)useradd test24passwd test24edquota u test24(对用户配置文件配额)显示数据块和结点重新挂载文件系统创建配额文件,重新生成磁盘用量表分配配额第五讲:DNS服务器DNS:记录主机名称和IP地址对应关系(分布式数据库)2015/1/18ARM体系架构与编程1990年ARM卖设计ARM:嵌入式RISC处理器核嵌入式CPU:特点:小型化功耗非常低实时响应快多为RISC型集中类型:MPUMCUDSPSoC片上系统(S3C2440)冯*诺依曼式:CUP通过一条总线访问程序及数据(先从存储器中取指令,再取数据)哈佛体系结构(可同时取指令和数据)CISC:Com
20、plex Instruction Set Computer复杂指令集计算机早期的CPURISC:精简指令集计算机除X86外CPU都为RISC特点:指令格式固定指令集较小寄存器数量相对较多,寄存器被用来存取过程参数和返回地址功耗低,成本低V1,V2,V3,V4架构(ARM7,8,9),V5(ARM 10)ARM 920T(T:内含16位压缩指令集Thumb)MOVE(寄存器到寄存器)LDR(内存到寄存器)ARM/Thunb(取址D31:0数据ARM/指令Thumb指令解码ARM指令解码)流水线:取址译码执行ARM的7种基本工作模式:User用户模式(正常程序执行的模式)FIQ:快速中断模式,当一
21、个高优先级(fast)中断产生时将会进入这种模式(高速数据传输和通道处理)IRQ:外部中断模式,当一个低优先级(normal)中断产生时将会进入这种模式(通常的中断处理)Supervisor:管理模式,当复位或软中断指令执行时将会进入这种模式(供操作系统使用的一种保护模式)Abort:中止模式,当存取异常时将会进入这种模式(虚拟存储及存储保护)Undef:未定义模式,当执行未定义指令时会进入这种模式(软件仿真硬件协处理器)System:系统模式,使用和User模式相同寄存器集的特权模式(特权及的操作系统任务)除用户模式外,其余为特权模式除用户模式和系统模式外,其余为异常模式ARM寄存器ARM有
22、37个32-Bits长的寄存器-1个用作PC(program counter)-1个用作CPSR(current program status register程序状态寄存器)-5个用作SPSR(saved program status registers保存程序状态寄存器)-30个通用寄存器(用户模式下的一般寄存器和其他模式下的特殊寄存器)UserFIQIRQSVCUndefAbortr0r7r8r8r9r9r10r10r11r11r12r12r13(sp)r13(sp)r13(sp)r13(sp)r13(sp)r13(sp)(都不同)r14(lr)r14(lr)r14(lr)r14(lr)
23、r14(lr)r14(lr)(都不同)r15(pc)cpsrspsrspsrspsrspsrspsr(都不同)r0-r12子集r13(堆栈指针寄存器,sp指向栈顶)r14(存返回地址寄存器, lr存返回地址)r15(pc程序指针)ARM指令格式cond001opcodeSRdRnShifter_operandCond:指令执行的条件编码Opcode:指令操作符编码S:决定指令的操作是否影响CPSR的值Rd:操作目标寄存器编码Rn:包含第一操作数的寄存器编码shifter_operand:表示第二操作数语法格式:-SRd,Rn,Operand2条件码:Suffix描述测试的标志位EQ等于Z=1N
24、E不等于Z=0CS/HS无符号的大于或等于C=1CC/LO无符号的小于C=0MI负数N=1PL正数或零N=0VS溢出V=1VC没溢出V=0HI无符号的大于C=1&Z=0LS无符号的小于或等于C=0 or Z=1GE大于等于N=VLT小于N!=VGT大于Z=0&N=VLE小于等于Z=1 or N!=VAL总是执行1:CMPr3,#0CMPr3,#0BEQskipADDNEr0,r1,r2ADDr0,r1,r2skip2:if(a=0)func(1);CMPr0,#0MOVEQr0,#1BLEQfunc3:if(a=0)x=0;if(a0)x=1;CMPr0,#0MOVEQr1,#0MOVGTr1
25、,#14:if(a=4|a=10)x=0CMPr0,#4CMPNEr0,#10MOVEQr1,#0数据处理指令包括:算术指令:ADDADCSUBSBCRSBRSC逻辑指令:ANDORREORBIC比较指令:CMPCMNTSTTEQ数据搬移:MOVMVN上述指令只能对寄存器操作,不能针对存储器立即数寻址:ADD R0,R1,#5;MOVR0,#0x55;寄存器寻址:ADD R0,R1,R2;MOV R0,R1;寄存器移位寻址:ADD R0,R1,R2,ROR #5;MOVR0,R1,LSR R3;寄存器间接寻址:(涉及内存和存储器)STRR0,R1;R1=R0(STORE存)LDRR0,R1;R
26、0=R1(LOAD取)块拷贝寻址:LDMIA R0,R1-R5STMIA R1,R1-R5第一条指令从以R0的值为起始地址的存储单元中取出5个字的数据,第二条指令将取出的数据存入以R1的值为起始地址的存储单元中。堆栈寻址方式:STMFD R13!,R0,R1,R2,R3,R4;LDMFD R13!,R0,R1,R2,R3,R4;第一条指令将R0-R4中的数据压入堆栈,R13为堆栈指针第二条将数据出栈,恢复R0-R4原先的值。汇编程序中访问C程序变量IMPORT symbolC程序中内嵌汇编指令_asmC语言完全手册手持设备和工业控制设备2015/1/19常用命令: cat,chmod,disc
27、ard,echo,flashfsd,flashwrite, free,genhtml,hostname,init,kill,loader,ls,mkdir,mount,ps,reboot,rm,smanaged,sysconf,yes,insmod,lsmod,rmmod2015/1/21BootLoader的作用:两方面:初始化硬件引导操作系统运行其他功能:下载程序下载操作系统影响格式化Flash分区上电后运行的第一个程序一个完整的BootLoader是相当复杂的:需要包含整套Flash驱动的源码包含网络协议栈TCP/IPUSB通讯协议用户交互的界面BootLoader:U-Boot;VIV
28、I;RedBootBootLoader分区:boot:BootLoader自己所在的分区bootParam:参数区pic:启动界面区MyApp:应用程序分区kernel:Linux内核ys_yaffs:Linux文件系统wince:wince分区2015/1/23c语言指针:指针的概念指针变量的定义和引用指针与数组指针与字符串简单的说,指针就是地址;指针变量:首先是一个变量,不同之处在于这种变量中所存放的内容必须是地址。学习指针关注:指针的类型;指针所指向的类型;指针的值或者叫指针所指向的内存区;指针本身所占据的内存区;取指针的内容:int a=0;int *p=&a;a+;int b=*p;
29、b=1;总结:进行指针运算时(非声明时),*用来取指针所指向的内容指针变量可以进行的操作:1. 赋值:int a,*p1=&a,*p2;p2=p1;2. 输出:printf(“%x”,p1);3. 增减:p1+;p2-;p1+=4;(只能和一个整数)4. 取内容:a=5;p1=&a;printf(“%d”,*p1);5. 若p1=&a;则&*p1,*&a,(*p1)+,*p1+各自的含义指针作为函数的参数1. 形式:只需要形式参数名前加上一个*即可如:void test(int *pointer,char f,char *s)(其中指针为声明)2. 数组中的各元素表示为:a0、a1、a2、a3、a4或者是:*(a+0)、*(a+1)、3. 数组中的各元素的地址表示为:&a0、&a1、或者是:a、a+1、4. 当一个指针变量指向数组的首地址后,关系图为:指向数组元素的指针:a,&a0,s,&s0指向数组元素的访问:a0,*a,s0,*s6. 几个表达式的分析设定义:int a3=1,2,3;int *s=a;(1) s,*s(s表示地址a0,*s表示元素1)=a,*a;(2) s+,*s+(s+表示地址a1,*s+表示先s+再取
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论