第一章、嵌入式系统基础知识
1、嵌入式系统主要由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户应用软件等部分组成。
2、嵌入式处理器包含以下部分:处理器内核、地址总线、数据总线、控制总线、处理器本身的辅助支持电路,如时钟、复位电路等;片上I/O接口电路。
3、解释ARM(ARM属于RISC ARM7---冯诺依曼 ARM9---哈弗)
4、嵌入式操作系统:嵌入式Linux(uCLinux、RT-Linux、Embedix、XLinux、PoketLinux、红旗嵌入式Linux)、VxWorks、QNX、Windows CE、Palm OS、UC/OS
5、ARM9采用的就是哈弗结构,而ARM7采用的则是冯诺依曼结构。
ARM微处理器执行32位的ARM指令集时,工作在ARM状态;当ARM微处理器执行16位的Thumb指令集时,工作在Thumb状态。
6、本书采用的处理器是三星公司的S3C2410X。S3C2410X是使用ARM920T核
LPC2000-----ARM7
7、嵌入式系统开发为什么要采用交叉编译的方式?
答:由于宿主机和目标机的体系结构不同,在宿主机X86平台上可以运行的程序在目标机ARM平台上无法运行,因此嵌入式软件开发采用交叉编译方式在一个平台上生成可以在另一个平台上执行的代码。编译的主要的工作就是将程序转化成运行该程序的CPU所能识别的机器代码。
进行交叉编译的主机称为宿主机,也就是普通的通用计算机。
程序实际的运行环境称为目标机,也就是嵌入式系统环境。
第二章、嵌入式LinuxC语言开发工具
1、vi编辑器的使用按不同的使用方式可以分为3种状态,分别是命令行模式、插入模式、底行模式。
2、vi中3种模式的切换
(1)命令行模式、底行模式转为插入模式
按a/A i/I o/O
(2)插入模式转为命令命令行模式、底行模式
只需使用Esc键即可
(3)命令行模式与底行模式转换
只需直接键入相应模式中的命令键即可。
3、编译器GCC的编译流程分为了4个步骤:预处理、编译、汇编、链接。
4、GCC编译流程分析
(1)预处理阶段:# gcc –E –o hello.i hello.c
(2)编译阶段:# gcc –s –o hello.s hello.i
(3)汇编阶段:# gcc –c hello.s –o hello.o
(4)链接阶段:# gcc hello.o –o hello
一步执行:# gcc hello.c –o hello
# ./hello
5、自己写的头文件打引号“”,不用尖括号<>
6、GDB是GNU开源组织发布的一个强大的Linux下的程序调试工具,它是一种强大的命令行调试工具。
调试器GDB用GCC进行编译时要加上“-g”选项
进入GDB只需输入GDB和要调试的可执行文件即可
在GDB中键入“l”(list)就可以查看所载入的文件
在GDB中设置断点只需在“b”后加入对应的行号即可
在设置完断点之后,用户可以键入“info b”来查看设置断点情况
GDB默认从首行开始运行代码,可键入“r”(run)即可运行代码
在GDB中只需键入“p+变量值”即可查看断点处的相关变量值
在GDB中键入命令“watch”来观察变量的变化情况
在GDB中只需键入“n”(next)即可单步运行
命令“c”(continue)可以使GDB继续运行程序
退出GDB只需使用指令“q”(quit)即可
7、make工程管理器的用途
工程管理器用来管理较多的文件
make工程管理器就是个自动编译管理器,能够根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时它通过读入Makefile文件的内容来执行大量的编译工作。
用户只需一次编写简单的编译语句即可。它大大提高了实际项目的工作效率。
8、在一个Makefile中通常包含如下内容:
(1)需要由make工具创建的目标体,目标体通常是目标文件、可执行文件或是一个标签。
(2)要创建的目标体所依赖的文件
(3)创建每个目标体时需要运行的命令
9、Emacs不仅仅是一款功能强大的编译器,它是一款集编辑、编译、调试于一体的开发环境。
第三章 构建嵌入式Linux 系统
1、嵌入式交叉编译环境是怎么搭建的?
1、安装交叉编译器
软件包:cross_2.95.3.tar.bz2
(1)在/usr/local/目录下建立目录arm,将软件包解压至该目录即可(可能需要root权限)。
# mkdir /usr/local/arm
# tar xjvf cross_2.95.3.tar.bz2 –C /usr/local/arm
交叉编译器安装在/usr/local/arm/2.95.3目录下。
(2)为Shell增加交叉编译器路径:
(a)使用export命令增加环境变量:
# export PATH=$PATH:/usr/local/arm/2.95.3/bin
(b)修改/etc/profile 文件:
# vi /etc/profile
增加路径设置:
pathmunge /usr/local/arm/2.95.3/bin。
2、ttys0-----COM1
ttys1------COM2
3、NFS文件系统如何去配置?
(1)设置服务器网卡,包括IP地址、掩码地址等,
(2)关闭防火墙
从Main Menu,选择System Settings-> Security Level,进入安全级别设置界面,将其安全级别设置为No Firewall。
(2)去掉iptables服务
从Main Menu,选择System Settings-> Server Settings->Services,在弹出的界面中,将iptables、ip6tables和ipchains前面的“√”去掉。
(3)启动NFS服务
从Linux的Main Menu,选择System Settings->Server Settings->NFS Server, 添加NFS路径。
测试NFS服务,可以将主机上的共享目录mount到自己另外一个目录下,如:
# mount 192.168.41.42:/zylinux/root /mnt
然后查看/mnt目录下是否有/zylinux/root目录下的文件,如果有的话,则NFS服务启动成功。
提示:如果NFS启动不成功,在/etc/rc.local文件末尾添加命令,让每次开机即启动NFS服务。
service portmap start
service nfs start
4、一个嵌入式Linux系统从软件的角度看通常可以分为4个层次
引导加载程序 Linux内核 文件系统 用户应用程序
5、Bootloader就是在操作系统内核运行之前运行的一段程序,类似于PC机中的BIOS程序。
Bootloader的功能是完成硬件设备的初始化、建立内存空间的映射图的功能,将系统的软硬件环境带到一个合适的状态,为最终调用系统内核做好准备。
6、编译嵌入式Linux内核的编译根据不同的情况会有不同的步骤,但其中最主要分别为3个步骤:内核配置、建立依存关系、建立内核,其他的为一些辅助功能,如清除文件等。
U-Boot 是在ppcboot以及ARMboot的基础上发展而来的较为通用的bootlader
第四章 嵌入式Linux C语言基础-----数据、表达式
1、变量的作用域
局部变量
全局变量
2、解释linux创建文件指令static
3、解释const
4、位运算符
5、P137 1题和2题
第五章嵌入式Linux C语言基础-----控制语句及函数
1、格式字符说明P141
2、switch语句p145
3、循环语句:for while goto
第六章 嵌入式Linux C语句基础----数组、指针、与结构
1、定义数组、指针、指针型数组、数组型指针
2、指针作为函数参数
3、指针和数组的关系 字符串
4、处理char和string
5、C语言规定main函数的参数只能有两个,习惯上这两个参数写为argc和argv
Main(int argc,char *argv[]),argc参数表示了命令行中参数的个数,argc的志是在输入命令行时由系统按实际参数的个数自动赋予的。Argv参数是字符串指针数组,其各元素值为命令中的各字符串的首地址。
第七章 嵌入式Linux C语言基础-----高级议题
1、宏定义 预定义符号
2、带参的宏和带参函数之间的区别
3、条件编译
4、C语言的内存分配
5、对齐方式# pragma pack(字节数)
6、volatile的解释
7、栈和堆的区别
C语言关键字volatile表明某个变量的值可能在外部被改变,因此对这些变量的存取不能缓存寄存器,每次使用时需要重新存取。
8、大端和小端
第八章 嵌入式Linux C语言基础----ARM Linux内核常见数据结构
1、链表插入、删除(单链表、双链表)
2、数的遍历
一类按根、左子数和右子树3各部分进行访问;另一类按层次访问。
第九章 文件I/O相关实例
1、系统调用是指操作系统提供给用户程序调用的一组“特殊”接口,用户程序可以通过这组“
特殊”接口获得操作系统内核提供的服务。
2、用户编程接口(API)作用和概念
3、什么是虚拟文件系统(VFS)?起作用是什么?
4、不带缓存的文件I/O操作和标准的I/O操作
第十章、ARM Linux进程线程开发实例
Linux系统中包括下面几种类型的进程:(各代表什么?)
1、交互进程 2、批处理进程 3、守护进程
进程状态:
1、运行 2、可中断 3、僵死 4、停止
进程的创建、执行和终止:
创建:fork()
运行:exec()函数负责读取可执行文件并将其载入地址空间开始运行。
终止:wait4()
Exec函数族:
Exit和_exit函数的区别:
最大的区别就在于exit函数在调用exit系统之前要检查文件的打开情况,把文件缓冲区中的内容写回文件。
Waitpid和wait的区别:
有名管道和无名管道的概念:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论