嵌入式系统考点

嵌入式系统考点

linux系统命令

1. Ctrl+Alt+T:进入terminal终端
2.	cd命令
用于切换当前目录,它的参数是要切换的目标路径,可以是绝对路径,也可以是相对路径。如:
    cd  /                   #返回至根目录
    cd .. 					  #返回上一级目录
    cd ../.. 					  #返回上两级目录
    cd /home/at91sam9g45  # 切换到目录 /home/at91sam9g45
    cd  path          	 # 切换到当前目录下的path目录中,“.”表示当前目录(可省略)
    cd ../path          	# 切换到上层目录中的path目录中,“..”表示上一层目录
3.	ls:用于查看文件与目录
ls -l:列出文件详细信息l(list)
4.	mkdir 目录名称:创建目录
5.	rm 文件名称:删除该文件
6.	rm -r (路径)目录名或文件名:递归删除,可删除子目录及文件
7.	rm -rf (路径)目录名或文件名:递归强制删除目录或文件
8.	mv:移动文件或者重命名
e.g.  mv 4.4.3 4.4    #将4.4.3重命名为4.4
	  mv  *  ../         #移动当前目录下所有文件至上一级目录
      mv  /usr/local/arm/4.4  /usr/local/arm/4.4.3
9.	pwd:显示当前目录
10.	ifconfig:查看网络情况
11.	ifconfig eth0 192.168.1.100 netmask 255.255.255.0 up :配置网络IP地址
12.	clear:清屏
13.	reboot:重启
14.	tar -xvf (文件路径)名称:解压压缩包到指定路径下
15.	tar -cvf 压缩包名称 待压缩目录或文件 :压缩目录或者文件到当前目录下
16.	cp:拷贝文件
e.g.  cp at91sam9g45/* . -rf  #将子目录at91sam9g45下所有文件拷贝至当前目录
	     cp /mnt/hgfs/share_vm/at91sam9g45.tar.gz .  #拷贝源码包至当前路径
17.	gedit (文件路径)名称:图形编辑该文件
18.	source (文件路径)名称:让该文件生效
e.g.  source /etc/profile  #让更改后的profile文件生效
19.	mount -t nfs -o nolock 192.168.1.8:/d/share_vm /mnt/nfs
用nfs文件系统将PC机的d:\share_vm(即nfs的共享目录)临时性地挂载到目标板的/mnt/nfs目录下
20.	make menuconfig:菜单化定制
21.	make clean:清除以前的编译结果及中间过程
22.	arm-linux-gcc -v:查看交叉编译器版本信息


常用的u-boot命令

  1. 获取帮助
    命令:help 或 ?
    功能:查看当前U-boot版本中支持的所有命令。
  2. 环境变量(environment variables)与相关指令
    环境变量 解释说明
    bootargs 传递给Linux内核的启动参数(console=ttyS0,115200 root=/dev/mtdblock2)
    serverip TFTP服务器端(即电脑host)的IP地址
    ipaddr 板子(target)在u-boot下的IP地址,便于tftp下载文件使用
    命令使用:
    (1) printenv:打印当前系统环境变量
    (2) setenv:设置环境变量
    格式为:setenv name value
    第1个参数是环境变量的名称。
    第2个参数是要设置的值,如果没有第2个参数,表示删除这个环境变量。
    e.g:setenv ipaddr 192.168.1.99
    (3) saveenv:将环境变量保存在NandFlash中
  3. 网络命令
    (1) ping:测试网络是否通了
    格式为:ping 192.168.1.8 (对方IP),若显示host 192.168.1.8 is alive则表示网络已连通
    (2) tftp
    格式为:tftp 目标板DRAM地址 文件名
    e.g. tftp 72000000 uImage2638
    意义:将位于tftp服务器Base Directory下的uImage2638文件通过网线传到板子DRAM的72000000开始位置
  4. NandFlash操作指令
    (1) nand read addr(DRAM) offset size
    意义:NandFlash读取命令,从NandFlash的offset偏移地址处起读取size字节的数据到DRAM的addr开始地址
    (2) nand erase offset size
    意义:NandFlash擦除命令,擦除NandFlash的offset偏移地址处起的size字节数据
    e.g. nand erase A0000 300000
    解析:擦除NandFlash的自A0000起的3MB空间
    (3) nand write addr(DRAM) offset size
    意义:NandFlash烧写命令,将DRAM处自addr地址起的size字节数据烧写到NandFlash的offset偏移地址
    e.g. nand write 72000000 A0000 300000
    解析:将DRAM72000000地址开始的3MB数据写入NandFlash的A0000偏移地址
    (4) nand info
    意义:显示NandFlash信息
  5. re:重启板子

重要的定义

交叉编译器

交叉编译器(Cross-compiler)是进行交叉平台开发的主要软件工具。它是运行在一种处理器体系结构上,但是可以生成在另一种不同的处理器体系结构上运行的目标代码的编译器。

交叉编译

交叉编译是在一个平台上生成另一个平台(体系结构不同)上的可执行代码。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。

根文件系统

根文件系统首先是内核启动时所mount的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行。

嵌入式系统的分层结构

嵌入式系统分为4层,硬件层、驱动层、操作系统层和应用层。

串口驱动开发的一般方法

  1. 保存原先串口配置,使用tcgetattr(fd,&oldtio)函数
    struct termios newtio,oldtio;
    tcgetattr( fd,&oldtio );

  2. 激活选项有CLOCAL和CREAD,用于本地连接和接收使能。
    newtio.c_cflag | = CLOCAL | CREAD;

  3. 设置波特率,使用函数
    cfsetispeed、 cfsetospeed
    cfsetispeed(&newtio, B115200);
    cfsetospeed(&newtio, B115200);

  4. 设置数据位,需使用掩码设置。
    newtio.c_cflag &= ~CSIZE;
    newtio.c_cflag |= CS8;

  5. 设置奇偶校验位,使用c_cflag和c_iflag。

设置奇校验:

newtio.c_cflag |= PARENB;
newtio.c_cflag |= PARODD;
newtio.c_iflag |= (INPCK | ISTRIP);

设置偶校验:

newtio.c_iflag |= (INPCK | ISTRIP);
newtio.c_cflag |= PARENB;
newtio.c_cflag &= ~PARODD;
  1. 设置停止位
    通过激活c_cflag中的CSTOPB实现。若停止位为1,则清除CSTOPB,若停止位为2,则激活CSTOPB。
    newtio.c_cflag &= ~CSTOPB; //1位停止位

  2. 设置最少字符和等待时间,对于接收字符和等待时间没有特别要求时,可设为0。
    newtio.c_cc[VTIME] = 0; //等待超时n*100ms
    newtio.c_cc[VMIN] = 0; //最少接收字符数

① C_CC[VTIME]=0 && C_CC[VMIN]=0  
read()立即返回。若有可读取的数据时,则读取数据并返回实际字节数,否则读取失败并返回0.(等同于非阻塞方式打开串口)  
② C_CC[VTIME]=0 && C_CC[VMIN]>0    
read()会等待到有C_CC[VMIN]个字节数可以被读取,否则一直处于阻塞状态。  
③ C_CC[VTIME]>0 && C_CC[VMIN]=0  
两种情况:a 有数据可读时,read()返回实际读到的字节数;   
b 在C_CC[VTIME] *  
100ms时间内,没有一个字节数据可读, read()返回0。  
④ C_CC[VTIME]>0 && C_CC[VMIN]>0  
收到第一个字符开始启动计时器,每收到一个字符,计时器清零,当计时器超过C_CC[VTIME] * 100ms后系统认为一包数据接收完毕, read()返回实际字节数;收到C_CC[VMIN]个字符,  
read()返回C_CC[VMIN]
  1. 处理要写入的引用对象
    tcflush函数刷清(抛弃)输入缓存(终端驱动程序已接收到,但用户程序尚未读)或输出缓存(用户程序已经写,但尚未发送)。
    int tcflush(int filedes, int queue )
    queue数应当是下列三个常数之一:
    •  TCIFLUSH 刷清输入队列。
    •  TCOFLUSH 刷清输出队列。
    •  TCIOFLUSH 刷清输入、输出队列。
    如:tcflush(fd,TCIFLUSH);
  2. 激活配置。在完成配置后,需激活配置使其生效。使用tsettattr()函数。原型:
int tcgetattr(int filedes, struct termios * 				termptr);
int tcsetattr(int filedes, int opt, const struct 			termios * termptr);

tcsetattr的参数opt使我们可以指定在什么时候新的终端属性才起作用。opt可以指定为下列常数中的一个:
• TCSANOW 更改立即发生。
• TCSADRAIN 发送了所有输出后更改才发生。若更改输出参数则应使用此选择项。
• TCSAFLUSH 发送了所有输出后更改才发生。更进一步,在更改发生时未读的所有输入数据都被删除(刷清)
使用如:tcsetattr(fd,TCSANOW,&newtio)

socket开发和三次握手

socket套接字框图

  • 第一次握手:请求连接
  • 第二次握手:接收连接
  • 第三次握手:请求服务器服务,同时发送数据

APP(应用)的开发方法

man手册查找各种命令的使用方法及头文件,在ubantu->#man fread

  • 1 -Commands available to users 一般普通的用户命令
  • 2 - Unix and C system calls 系统调用命令,可查找需要的头文件
  • 3 - C library routines for C programs C库函数命令,如printf fread (stdxxx.h)
  • 4 - Special file names 特殊文件,指/dev下的设备文件
  • 5 - File formats and conventions for files used by Unix 文件的格式
  • 6 - Games 留给游戏用的
  • 7 - Word processing packages 附件+全局环境变量
  • 8 - System administration commands and procedures 只能由root使用的管理命令

注意:man手册只能查找用户空间的函数及命令,不能查找内核空间的。

交叉编译:arm-linux-gcc –o execfile file.c
查看依赖的库:arm-linux-readelf –a execfile |grep NEEDED
调试方法:nfs/tftp->target->printf 或 GDB
     tftp –g –r led_app 202.204.100.1 (busybox里面的tftp)

设备驱动的Hello World模块

#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");//软件驱动开发的许可证,不写则显示内核被污染限定变量或函数作用域,该函数只能在这个.C文件可见
static int __init hello_init(void)
{        
	printk(KERN_ALERT "Hello world\n");        
	return 0;
}
static void __exit hello_exit(void)
{        
	printk(KERN_ALERT " Hello world exit\n");
}
module_init(hello_init);
module_exit(hello_exit);

MODULE_LICENSE()—模块许可证声明(必须):
模块许可证(LICENSE)声明描述内核模块的许可权限
如果不声明LICENSE,模块被加载时,将收到内核被污染(kernel tainted)的警告
许可证类型包括:“GPL”、 “GPL v2”、 “GPL and additional rights”、 “Dual BSD/GPL”、“Dual MPI/GPL”、 “Proprietary”

MODULE_LICENSE()—模块许可证声明(必须):
模块许可证(LICENSE)声明描述内核模块的许可权限
如果不声明LICENSE,模块被加载时,将收到内核被污染(kernel tainted)的警告
许可证类型包括:“GPL”、 “GPL v2”、 “GPL and additional rights”、 “Dual BSD/GPL”、“Dual MPI/GPL”、 “Proprietary”

嵌入式考点

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.嵌入式实时操作系统的特点与常用的几种嵌入式操作系统。 实时性,可裁剪性。 ucos-Ⅱ RTLinux ARM-Linux KURT TimeSys Linux Mach 商业常见 VxWorks QNX pSOS Windows CE 2.掌握uC/OS-Ⅱ操作系统中的任务的存储结构与任务控制块主要成员变量的作用、任务的程序结构、任务的调度过程、任务状态的转换过程、任务的创建过程。任务级的切换与中断级的切换。 一.任务的存储结构P74 前一个任务控制块的Ptr 后一个任务控制块的Ptr 指向任务的Ptr 指向堆栈的Ptr 任务的优先级别 ............................ 任务的代码: void mytask(void * ) {......... For( ; ; ) {......} } 任务的堆栈: ....................... 系统在运行一个任务是,先按优先级找到任务控制块,在任务堆栈中找到任务代码的指针。 任务控制块是系统管理任务的依据。 任务控制块-------保存任务的属性 任务的代码-------任务的执行部分 任务的堆栈-------保存任务的工作环境 二.任务控制块主要成员变量的作用P78 不同任务 TCB成员变量个数不是固定的。 其中 OSTCBStat 用来存放任务当前状态。 其中 OSTCBDly 用来存放任务等待时限(节拍数)。 其中 OSTCBPrio 用来存放任务的优先级。 所有任务控制块分为2条链表:空闲任务块链表和任务块链表。 空闲任务块是uC/OS-Ⅱ的全局数据结构 OSInit()创建空闲任务控制块链表的步骤:1先在RAM中建立一个OS_TCB结构类型的OSTCBTb1[]使数组每个元素都是一个任务控制块,然后利用OS_TCB结构中的OSTCBTNext和OSTCBPrev连起来构成一个链表。 为了加快对任务控制块的访问速度:除了任务控制块链表创建成双向链表外在uC/OS-Ⅱ的uCOS-Ⅱ.H中还定义了一个OS_TCB*类型的数组OSTCBTb1[]专门用来存放指向各任务控制块的指针。 删除一个任务的实质:把任务的控制块从任务控制块链表中删除,并把它归还给任务控制块链表。但是任务的代码还在内存中没被删除。 任务的程序结构 任务的调度过程 在就绪任务表中寻找优先级最高的就绪任务置为运行态,然后中止当前正在运行的任务,从而运行刚刚那个置为运行态的任务 若 OSLockNesting当前的值不为0则 禁止调度 任务状态的转换过程 任务的创建过程 先检测任务的优先级是否合法 然后检测该优先级是否被占用 然后保留该优先级 然后初始化任务堆栈 然后获得任务控制块并初始化 然后任务计数器+1 最后调度 否则放弃任务 任务级的切换与中断级的切换 OSIntCtxSw() -- 中断级任务切换函数与OSCtxSw() -- 任务级切换函数的区别: OSIntCtxSw()与OSCtxSw()的后半部分相同,而OSIntCtxSw()缺少的断点保护,则在中断子程序中完成。但是两者都完成两任务的切换: OSCtxSw() 完成两个不同任务间的切换; OSIntCtxSw()则是在一定条件下,在中断结束后,原被中断的程序与更高优先级的任务之间的切换。 掌握五种任务的通信与同步的方法。对应的事件控制块与信号量集标志组的结构。并比较这五种任务的通信与同步的方法在请求、发送过程中的各自特点。 C/OS-Ⅱ操作系统初始化所须完成的的五件事:初始化几个重要的全局变量、数组OSTCBPrioTbl[ ]、就绪表、五个链表(空任务控制块、空事件控制块、空队列控制块、空信号量集标志组、空内存控制块)、创建空闲任务。或有条件创建统计任务。 中断及中断服务程序。定时中断服务及时钟节拍服务函数OSTimTick()的作用 CPU相应中断的条件:1至少有一个中断源向CPU 发出信号 2系统允许信号且未对此信号屏蔽。 钟节拍服务函数OSTimTick()的作用:1把用来记录时间进程的计数器OSTime+1 2遍历任务控制块链表中所有任务控制块,吧各个任务控制块中用来存放任务延时的OSTCBDly-1,并使该项为0,同时又不是被挂起的任务进入就绪状态。 6.掌握创建、请求与发送一个信号量与消息邮箱的程序流程。 7.熟练应用信号量与消息邮箱实现任务的通信与同步的程序设计。一个应用程序的基本框架。 8.了解C/OS-Ⅱ移植的一般原则。 C/OS-Ⅱ移植的条件:1在程序中可以开关中断2处理器支持中断并能产生定时中断3处理器支持中断且容纳一定数据的硬件堆栈4处理器有将堆栈指针和其他CPU存储器存储读取到堆栈的指令。 9.了解一个完整的基于C/OS-Ⅱ内核的操作系统的组成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值