BSP及嵌入式驱动开发笔记
第一讲嵌入式系统基本概念
以应用为中心,以计算机技术为基础,其软硬件可配置,对功能、可靠性、成本、体积、功耗有严格约束的一种专用系统,所用的计算机称为嵌入式计算机。
Linux目录文件
/bin :显而易见,bin 就是二进制(binary)英文缩写。
/boot :在这个目录下存放的都是系统启动时要用到的程序。在使用grub或lilo引导linux的时候,会用到这里的一些信息。
/dev:dev 是设备(device)的英文缩写。这个目录对所有的用户都十分重要。因为在这个目录中包含了所有linux系统中使用的外部设备。但是这里并不是放的外部设备的驱动程序。
/etc :etc这个目录是linux系统中最重要的目录之一。在这个目录下存放了系统管理时要用到的各种配置文件和子目录。我们要用到的网络配置文件,文件系统,x系统配置文件,设备配置信息,设置用户信息等都在这个目录下。
/sbin :这个目录是用来存放系统管理员的系统管理程序。
/home :如果建立一个用户,用户名是“jl”,那么在/home目录下就有一个对应的/home/jl路径,用来存放用户的主目录。
/lib :lib是库(library)英文缩写。这个目录是用来存放系统动态连接共享库的。几乎所有的应用程序都会用到这个目录下的共享库。
/mnt :这个目录在一般情况下也是空的。可以临时将别的文件系统挂在这个目录下。
/proc :可以在这个目录下获取系统信息。这些信息是在内存中,由系统自己产生的。
/root :如果用户是以超级用户的身份登录的,这个就是超级用户的主目录。
/tmp :用来存放不同程序执行时产生的临时文件。
/usr :这是linux系统中占用硬盘空间最大的目录。
Linux命令
1、ls、mkdir、rmdir、date、who 相对路径和绝对路径
2、文件解压命令
gzip *.jpg压缩 gzip –d *.gz解压
打包命令
.gz
解压1:gunzip FileName.gz
解压2:gzip -dFileName.gz
压缩:gzip FileName
打包
.tar.gz 和 .tgz
解压:tar zxvfFileName.tar.gz ./DirName
压缩:tar zcvfFileName.tar.gz DirName
.tar.bz2
解压:tar xjf FileName.tar.bz2 ./DirName
压缩:tar cjf FileName.tar.bz2 DirName
fdisk –l查看磁盘设备信息 fdisk –l /dev/sdb 查看磁盘设备信息如u盘
mount 挂载u盘和nfs
mount -t nfs 主机ip:共享目录 挂载点 mount -t nfs 192.168.1.4:/arm2410s /mnt
–onolock加文件锁 mount –t nfs –onolock 192.168.1.4:/home/test /mnt
mount –t msdos /dev/sdb1 mnt/usb u盘设备是/dev/sdb1 挂载到 /mnt/usb
mount -t vfat /dev/sdb1 /mnt/sdcard 挂载u盘
msdos文件系统参数 如fat32用vfat fat16用msdos ext用ext2
redhat-config-users查看用户
第2讲 嵌入式交叉开发环境
嵌入式linux开发流程
1、 建立开发环境
2、 配置开发主机,配置MINICOM(相当于Windows下的超级终端)
3、 建立引导装载程序bootloader
4、 下载别人已经移植好的linux操作系统
5、 建立根文件系统
6、 建立应用程序的flash分区
7、 开发应用程序
8、 烧写内核、根文件系统、应用程序
9、 发布产品
开发模式 交叉编译
• 宿主机(Host)是用来开发嵌入式软件的系统。指要安装虚拟机软件的计算机。
• 目标机(Target)是被开发的目的嵌入式系统。指arm设备。
• 交叉编译器(Cross-compiler)是进行交叉平台开发的主要软件工具。它是运行在一种处理器体系结构上,但是可以生成在另一种不同的处理器体系结构上运行的目标代码的编译器。
串口、网线
虚拟机里面的Linux系统、arm、PC
ftp在三者中都可以通,nfs为linux和linux系统之间通信,samba服务器是在linux和Windows之间通信,NFS可以将远程文件系统载入在本地文件系统下。
Redhat远程登录Windows
Windows远程登录linux 开启Windows和linux里面的telnet服务
虚拟机和本机网络连同步骤
1.关闭防火墙
2.网卡激活和设置
3.开启服务
4.设置为桥接方式
5.关掉无线网络
注意事项
1、VMwareVirtual Ethernet Adapter for VMnet1和redhat的ip要处在同一网段。
2、redhat里面网络设置
3、虚拟机的网络设置host-only
1BRIDGE:相当于主机和虚拟机连接到同一个hub上,虚拟机要和主机配置到同一网段上
2 NAT:使用vmnet8,主机开启必要的VMware服务,如vmvaredhcp,虚拟机设置成dhcp方式即可,当然也可以手工设置成vmnet1同一网段,比较麻烦
3HOST-ONLY:使用vmnet1,直接和主机互联,可以使用ifconfig查看配置情况
Linux里面常见的编辑编程工具Vi geditkwrite emacs kdevelop
第3讲 Linux下的c语言开发
交叉编译工具的安装
先将目录sharefile\ 中的arm-linux-gcc-3.3.2.tgz 、arm-linux-gcc-2.95.3.tgz和
arm-linux-gcc-3.4.1.tgz 拷贝到某个目录下如tmp\,然后进入到该目录,执行解压命令:
#cd \tmp
#tar xvzf arm-linux-gcc-3.3.2.tgz –C /
#tar xvzf arm-linux-gcc-2.95.3.tgz –C /
#tar xvzf arm-linux-gcc-3.4.1.tgz –C /
#mkdir –p/opt/FriendlyARM/QQ2440 ; 建立工作目录,备用
然后运行命令
#gedit /root/.bashrc
编辑/root/.bashrc 文件,在最后一行 export PATH=$PATH:/usr/local/arm/3.4.1/bin
(arm上编译,pc上编译)
1、 编写代码
2、 编译(双平台)
3、 执行
gcc的执行过程
使用gcc由C语言源代码文件生成可执行文件的过程要经历四个相互关联的步骤∶
1、预处理(也称预编译,Preprocessing)
——对头文件(include)、预编译语句(如define等)进行分析[预处理器cpp]
2、编译(Compilation)
——将预处理后的文件转换成汇编语言,生成文件.s[编译器ccl]
3、汇编(Assembly)
——由汇编变为目标代码(机器代码),生成.o的文件[汇编器as]
4、连接(Linking)
——连接目标代码,生成可执行程序[链接器ld]
-I用来指定头文件目录.
/usr/include目录一般是不用指定的,但是如果头文件不在/usr/include里我们就要用-I参数指定了,比如头文件放在/myinclude目录里,那编译命令行就要加上
- I myinclude参数了,如果不加你会得到一个“xxxx.h:No such file or directory”的错误。
eg.
-includefile
功能相当于在代码中使用#include
例子用法:
gcc -oexample example.c -include /usr/include/stdio.h
Makefile基本结构
target: prerequisites 依赖关系
<TAB> command 命令
Make工具及makefile文件概述
1、config 生成make文件
2、make 生成可执行文件
3、make install (文件先拷贝至系统路径)将文件安装至指定位置
4、make clean 清楚make产生的安装文件
Makefile实例:
#makefile开始
myprog:foo.obar.o
gccfoo.obar.o-omyprog
foo.o:foo.cfoo.hbar.h
gcc-cfoo.c-ofoo.o
bar.o:bar.cbar.h
gcc-cbar.c-obar.o
clean:
-rm *.o myprog
#makefile结束
环境变量:
a)存储文件名列表。
b)存储可执行文件名。
c)存储编译器标识。
d)存储参数列表。
使用环境变量后的makefile实例
=======makefile开始======
OBJS=foo.o bar.o
CC=gcc
CFLAGS=-Wall–O –g#-WALL开启警告信息–O优化–g可调试
EXEC=myprog
$(EXEC):$(OBJS)
$(CC) $(OBJS) –o $(EXEC)
foo.o:foo.c foo.hbar.h
$(CC) $(CFLAGS) –c foo.c –o foo.o
bar.o:bar.cbar.h
$(CC) $(CFLAGS)bar.c –o bar.o
========makefile结束=======
内部变量:
$@---扩展成当前规则的目的文件名
$<---扩展成依靠列表中的第一个依靠文件
$^ ---扩展成整个依靠的列表
Makefile变量
=====makefile开始======
OBJS =foo.o bar.o
CC = gcc
CFLAG=-Wall –O –g
myprog:$(OBJS)
$(CC) $^ -o $@
foo.o:foo.cfoo.h bar.h
$(CC) $(CFLAG) –c $< -o $@
bar.o:bar.cbar.h
$(CC) $(CFLAG) –c $< -o $@
======makefile结束=======
第4讲 bootloader与内核
Bootloader概念:就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。
Bootloader的功能
1.硬件设备初始化(CPU的主频、SDRAM、中断、串口等)
2.内核启动参数
3.启动内核
4.与主机进行交互,从串口、USB口或者网络口下载映象文件,并可以对FLASH等存储设备进行管理
嵌入式系统最先执行的是bootloader
Bootloader的烧写方式
1.通过JTAG口
2.通过以太网口
3.通过串口
4.其中前两种方式比后一种快得多
Bootloader的操作模式
1.启动加载模式(产品发布)
2.下载模式(烧写系统)
Vivi一个bootloader,编译配置,常见的bootloader有vivi和uboot。
内核的裁减make menuconfig内核编译的结果是生成zImage文件
arch/arm/boot/zImage,可自解压的压缩内核的映像文件
构建根文件系统 ./mkyaffsimage root_nfs root.img
第5讲 驱动与QT
目前Linux 支持的设备驱动大体可分为三种:
字符设备(character device);如串口、触摸屏、并口、虚拟控制台、AD等。
块设备(block deivce);诸如磁盘,内存,Flash等。
网络接口设备(network interface)。eth0等。
块设设备与字符设备类似,块设备也是通过文件系统来进行访问,它们之间的区别仅仅在于内核内部管理数据的方式不同。
传统方式中的设备管理中,除了设备类型外,内核还需要一对称作主次设备号的参数, 才能唯一标识一个设备。
主设备号相同的设备使用相同的驱动程序,次设备号用于区分具体设备的实例。
为该模块建立一个设备节点。主设备号指某一类设备次设备号指某一个设备。
命令: mknod /dev/tsc 254 0
其中/dev/ts表示我们的设备名是ts,“c” 说明它是字符设备,“254” 是主设备号,“0” 是次设备号。
一旦通过mknod 创建了设备文件,它就一直保留下来,除非我们手工删除它。
Linux驱动编译和加载方式
一种是直接编译到内核,当内核启动之后,新的驱动程序随之运行;
二是编译为模块,动态加载运行。
对模块操作需要使用module-utiles:
insmod将编译的模块直接插入内核
rmmod从内核中卸载模块
lsmod显示已安装的模块
驱动程序与应用程序的区别
应用程序一般有一个main 函数,从头到尾执行一个任务;
驱动程序却不同,它没有main 函数,通过使用宏module_init(初始化函数名),将初始化函应用程序可以和GLIBC库连接,因此可以包含标准的头文件,比如<stdio.h>、<stdlib.h>等,;
在驱动程序中是不能使用标准C 库的,因此不能调用所有的C库函数, 只能调用内核的函数<linux/module.h>。
Qt是挪威Trolltech公司出品的一个跨平台的C++图形用户界面库。
考试
选择 20
填空 20
指令操作 20
编程 20
分析 20
相关推荐
- **中间层**(也称为硬件抽象层HAL或板级支持包BSP):该层位于系统上层软件和底层硬件之间,通过提供一系列标准化接口,使上层软件开发人员无需关注底层硬件细节,从而降低软件开发难度和复杂度。 - **BSP的两个...
总之,VxWorks网络驱动开发是一个综合性的任务,涉及到操作系统内核、硬件平台、网络协议等多个层面。理解VxWorks的架构和驱动模型,结合硬件特性编写高效的驱动程序,是成功实现网络功能的关键。在实际开发中,...
"软考嵌入式系统设计师笔记归纳总结" 本笔记涵盖了嵌入式系统设计师需要掌握的知识点,包括嵌入式系统的组成、定义、实时系统的调度、实时系统的定义和特点、嵌入式微处理器体系结构等。 一、嵌入式系统的组成 ...
中间层也称为硬件抽象层(HAL)或板级支持包(BSP),它将系统上层软件和底层硬件分离开来,使系统上层软件开发人员无需关系底层硬件的具体情况,根据BSP层提供的接口开发即可。系统软件层包括RTOS、文件系统、GUI、...
5. 设备驱动层(BSP): - 硬件初始化和管理的核心,提供抽象接口隔离操作系统与硬件。 - 包括BootLoader和设备驱动程序。 - BootLoader:启动系统,初始化硬件,加载操作系统内核。 - 设备驱动程序:与硬件交互...
中间层是指硬件抽象层(HAL)或板级支持包(BSP),它将系统上层软件和底层硬件分离开来,使系统上层软件开发人员无需关系底层硬件的具体情况。系统软件层由RTOS、文件系统、GUI、网络系统及通用组件模块组成。应用...
2. **嵌入式系统组成**:包括硬件层、中间层(硬件抽象层HAL或板级支持包BSP)、系统软件层和应用软件层。硬件层主要由微处理器、存储器、通用设备接口和I/O接口构成,其中Cache用于加速数据处理。中间层负责隔离...
【嵌入式系统设计师考试笔记之操作系统基础】 嵌入式系统设计中,操作系统基础是核心内容之一。嵌入式软件有其独特的特点,包括规模小、开发难度大、实时性和可靠性要求高以及需要固化存储。嵌入式软件分为三类:...
6. **嵌入式底层软件开发**:驱动开发是关键,它连接硬件和操作系统,确保硬件功能在操作系统上的正确体现。 7. **预备知识**:学习嵌入式系统设计需要扎实的C语言基础(至少3万行代码量)和单片机知识,理解硬件...
在嵌入式系统开发领域,BSP(Board Support Package)是针对特定硬件平台的底层驱动程序集合,它使得操作系统能够与硬件进行有效通信。本文将深入探讨S3C44B0X处理器上VxWorks操作系统的BSP移植过程,这对于理解和...
### 嵌入式系统设计师考试笔记精要 #### 一、引言 本文档源自一位热心分享者intq的作品,旨在为准备参加嵌入式系统设计师考试的读者提供宝贵的复习资料。根据作者的介绍,《嵌入式系统设计师考试复习笔记之存储...
### 嵌入式系统设计师考试笔记知识点梳理 #### 一、引言 本文档是对嵌入式系统设计师考试中的“嵌入式系统基础知识”部分的详细总结与解析。作者intq于2009年9月21日发布此笔记,旨在帮助备考者更好地理解和掌握...
嵌入式系统设计师软考备考笔记主要涉及嵌入式系统的基础知识,包括嵌入式系统定义、组成、发展阶段、知识产权核(IP核)、实时系统的特点和调度方法等内容。以下为详细知识点: 一、嵌入式系统的定义 嵌入式系统是指...
### Zynq7000网络驱动调试笔记详解 #### 一、Zynq7000与SAMA...总之,本次调试笔记不仅记录了技术上的挑战与解决方案,更重要的是提供了宝贵的实践经验和技术反思,对于从事嵌入式开发的专业人士具有很高的参考价值。
3. 系统软件层:通常由RTOS、文件系统、GUI、网络系统及通用组件模块组成,RTOS是嵌入式应用软件开发的基础和平台。 4. 应用软件层:基于实时系统开发的应用程序构成,实现应用层功能。 三、实时系统及其特点 1. ...
### 嵌入式系统设计师考试笔记精要 #### 一、引言 本文档源自一位热心人士(网名:intq),他在2009年撰写了一系列关于嵌入式系统设计师考试复习笔记的文章,旨在帮助备考者更好地理解和掌握考试中的关键知识点。...
总的来说,这份笔记全面介绍了嵌入式系统的设计、开发和实时性方面的知识,是备考嵌入式系统设计师考试的宝贵资料。学习者可以通过这份笔记深入理解嵌入式系统的原理和技术,为实际工作或考试做好充分准备。
对于从事嵌入式系统开发的技术人员而言,ZLG的BSP移植文档具有很高的学习和参考价值。通过学习这些文档,开发者可以掌握如何为特定硬件平台构建和优化VxWorks BSP,从而提高系统的性能和稳定性。此外,文档中的案例...