《嵌入式linux系统应用及项目实践 教学课件 ppt 作者 丰海 39684 习题答案》由会员分享,可在线阅读,更多相关《嵌入式linux系统应用及项目实践 教学课件 ppt 作者 丰海 39684 习题答案(22页珍藏版)》请在金锄头文库上搜索。
1、 共 22 页 1 第一章第一章 习题习题 1. 简述嵌入式简述嵌入式 Linux 系统的基本组成。系统的基本组成。 嵌入式 Linux 系统由嵌入式软件系统和嵌入式硬件系统组成; 嵌入式软件系统包括引导程序、内核、文件系统、应用软件组成; 嵌入式软件系统由嵌入式处理器及外围接口组成。 2. 简述安装纯的简述安装纯的 Ubuntu 系统的步骤。系统的步骤。 1)首先制作 Ubuntu 启动盘 2) 从 U 盘启动安装 Ubuntu 3) 软件更新升级 3. 简述烧写引导程序、内核、根文件系统的步骤。简述烧写引导程序、内核、根文件系统的步骤。 1)准备引导程序 u-boot.bin、内核文件 z
2、Image.bin、根文件系统 root.bin 2)将启动开关打到从 Nor Flash 启动,根据提示通过网络口烧写。 (mini2440 可以通过 USB 烧写) 烧写 u-boot.bin 烧写内核文件 zImage.bin 烧写根文件系统 root.bin 4. 将配套的引导程序、内核、根文件系统烧写进将配套的引导程序、内核、根文件系统烧写进 TQ2440 开发板中,并且在开发板上运行开发板中,并且在开发板上运行 Hello 应用程序。应用程序。 参考 1.3.2 烧写 TQ2440 的引导程序、内核、文件系统和 1.3.3 在开发版上运行编译好的 Hello 应用程序 第二章第二章
3、 习题习题 答案就在习题的后面 第三章第三章 习题习题 1.简述电压、电流、电阻和电功率的概念。 1.简述电压、电流、电阻和电功率的概念。 电压:能够使电荷移动的电压差; 电流:电荷的定向移动; 电阻:对所通过的电流呈现一定的阻力; 电功率:电路元器件及设备在单位时间内吸收或者发出的能量; 2 简述电容和电感的特性参数。 2 简述电容和电感的特性参数。 电容广泛应用于隔直,耦合,旁路,滤波,调谐回路,能量转换,控制电路等方面。 电容对电流的阻碍能力应该叫容抗。用 Xc 表示,Xc1/(2 fc) 。 电感量 L 表示线圈本身的固有特性,与电流大小无关。电感线圈对交流电流阻碍作用的大小称感抗 X
4、L, 单位是欧姆。它与电感量 L 和交流电频率 f 的关系为 XL=2fL。 品质因素 Q 是表示线圈质量的一个物理量,Q 为感抗 XL 与其等效的电阻的比值,即:Q=XL/R,线圈的 Q 值愈高,回路的损耗愈小。线圈的 Q 值与导线的直流电阻,骨架的介质损耗,屏蔽罩或铁芯引起的损耗,高频 趋肤效应的影响等因素有关。 3 二极管的工作原理是什么? 3 二极管的工作原理是什么? 二极管是一种具有单向传导电流的电子器件,外加电压时,具备单向电流的转导性。一般来讲,晶体二极管 是一个由 p 型半导体和 n 型半导体烧结形成的 p-n 结界面。需要注意的是,如果正向电压没有达到一定的值,二 极管中也是
5、没有电流的。硅二极管所需外加电压为 0.70.8V,肖特基二极管约为 0.2V,发光二极管(LED)为 共 22 页 2 DS18B20与S3C2410处理器的接口电路图 TQ2440开发板上的GPIO接口 25V 以上,才能让电流正向流动。在反向上外加一定电压时,也可突然产生电流,这种现象称之为击穿,击穿 电压几乎不受电流影响。 4 模拟信号和数字信号的区别是什么? 4 模拟信号和数字信号的区别是什么? 模拟信号是随时间连续变化的物理量,其信号的幅度,或频率,或相位随时间作连续变化。 数字信号是随时间离散变化的,幅值表示被限制在有限个数值之内。一般由二进制表示,二进制的每位只能 取 0 或者
6、 1;二进制码受噪声的影响小,抗干扰能力强、无噪声积累;便于加密处理;便于存储、处理和交换, 所以得到了广泛的应用。 5 给出一个温度传感器 DS18B20 与 TQ2440 开发板的连接图。 5 给出一个温度传感器 DS18B20 与 TQ2440 开发板的连接图。 第四章第四章 习题习题 1. 简述 Makefile 文件的基本语法规则。 1. 简述 Makefile 文件的基本语法规则。 在嵌入式系统的程序开发中, 通常一个较大的程序都会使用到不同的小程序或函数, 所以在编译时就要将这 些不同的程序编译,产生不同的目标文件,然后再将这些不同的目标文件连接成最后可执行的二进制程序。如果 这
7、些工作用手动输入编译命令的话,效率很低。所以 GNU gcc 提供了自动化编译工具 Make,其功能就是在执行 编译时只针对修改的部分进行编译,没修改的程序部分不做编译,但是 Make 编译工具需要按照 Makefile 文件里 的语法规则进行编译。 Makefile 文件里的语法规则描述了各个文件间的依赖关系和更新命令。 以一个典型的 Makefile 文件为例: TARGET = hello_app_2 #(这一行定义了可执行应用程序的名称 hello_app_2,其对应的源代码为 hello_app_2.c 文件) CC = arm-linux-gcc #(这一行定义了编译器为 arm-
8、linux-gcc 交叉编译器) KERNELDIR ?= /opt/EmbedSky/linux-2.6.30.4/ #(定义内核源代码的目录,内核源代码必须编译过一次,才可以编译我们自己编写的驱动) PWD := $(shell pwd) # 编译的驱动放在当前目录下 共 22 页 3 #(输入 make 编译命令时默认为 all) all: $(TARGET) modules # 编译应用程序 $(TARGET): $(CC) -o $(TARGET) $(TARGET).c # 前面的空格要用 Tab 键,不能用 Space 键前面的空格要用 Tab 键,不能用 Space 键 mod
9、ules: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules clean: rm -rf *.o * core .depend .*.cmd *.ko *.order *.mod.c *.symvers .tmp_versions $(TARGET) obj-m := hello_driver_2.o # 编译驱动,驱动的源代码为 hello_driver_2.c,首先生成 hello_driver_2.o, # 然后编译成.ko 的驱动,该驱动的名称为 hello_driver_2.ko 2. 简述交叉编译器的概念。 2. 简述交叉编译器的概念。 交叉编译(C
10、ross compiler)是指在某个系统平台下编译出在另一个系统平台上运行的可执行文件。对于 嵌入式 Linux 开发就是在 x86 CPU 的 PC 硬件平台上的 Linux 系统下编译出能够在 arm 硬件平台下运行的可执 行程序,一般把 PC 平台叫做宿主机(host) ,开发板叫做目标机(target) 。开发嵌入式系统时,由于受限于 嵌入式系统产品的特有限制, 也就是其不可能具有很大的储存容量及丰富的人机接口, 所以开发环境都必须建 立在 PC 计算机(Host)上,因此必须使用交叉编译技术。 3. 简述 arm-linux-gcc 交叉编译器的使用步骤。 3. 简述 arm-li
11、nux-gcc 交叉编译器的使用步骤。 1. 使用 vi 编辑器建立一个源代码文件,如 hello.c 源代码文件 2. 使用 arm-linux-gcc 交叉编译器来编译 hello.c 源代码,如: fhfh:/my_experiment/4z$ arm-linux-gcc hello.c -o hello_arm 3.登录到 TQ2440 目标平台上,通过 tftp 将编译好的可执行程序 hello_arm 下载到开发平台上。 4.登录到 TQ2440 目标平台上,执行可执行二进制程序 hello_arm。 4. 参照 4.2.5 中的例子分别编译出在 PC 机和开发板上运行的程序。4.
12、 参照 4.2.5 中的例子分别编译出在 PC 机和开发板上运行的程序。 参考 4.2.5 Makefile 练习范例和 4.3.3 arm-linux-gcc 交叉编译器的使用 首先用 vi 编辑器编写 4 个主程序 hello.c 源代码、头文件 hello.h、求和源代码 add.c 和求差源代码 sub.c,最 后还要编写 Makefile 文件,这样才可以用 make 编译工具来来方便地编译这几个文件 (1) 主程序 hello.c 源代码 /*hello.c*/ #include #include #include “hello.h“ int main() int a,b,c,d;
13、 printf(“请输入两个整数: “); scanf(“%d %d“, c=add(a,b); printf(“此两个整数的和为 %dn“,c); d=sub(a,b); printf(“此两个整数的差为 %dn“,d); 共 22 页 4 return 0; (2) 头文件 hello.h 中包含求两整数和及差的原型声明,其程序源代码如下所示: (2) 头文件 hello.h 中包含求两整数和及差的原型声明,其程序源代码如下所示: /*hello.h*/ int add(int,int); int sub(int,int); (3) 求两整数和的函数 add( ),定义在 add.c 程序
14、中,其程序源代码如下所示: (3) 求两整数和的函数 add( ),定义在 add.c 程序中,其程序源代码如下所示: /*add.c*/ int add(int a,int b) int s; s=a+b; return (s); (4) 求两整数差的函数 sub( )定义在 sub.c 程序中,其程序源代码如下所示: (4) 求两整数差的函数 sub( )定义在 sub.c 程序中,其程序源代码如下所示: /*sub.c*/ int sub(int c,int d) int dif; dif=c-d; return (dif); (5)(5)编辑 Makefile 文件,其内容如下: CC
15、 = gcc hello:hello.o add.o sub.o $(CC) -o hello hello.o add.o sub.o hello.o:hello.c hello.h $(CC) -c hello.c add.o: add.c $(CC) -c add.c sub.o: sub.c $(CC) -c sub.c clean: rm -rf *.o hello (6)(6)运行 fhfh:/my_experiment/xt/4zxt/4.4.4$ ls -al 总用量 28 drwxr-xr-x 2 fh fh 4096 2013-01-12 21:15 . drwxr-xr-x
16、 3 fh fh 4096 2013-01-12 21:08 -rw-r-r- 1 fh fh 70 2013-01-12 21:10 add.c -rw-r-r- 1 fh fh 279 2013-01-12 21:09 hello.c -rw-r-r- 1 fh fh 48 2013-01-12 21:09 hello.h -rw-r-r- 1 fh fh 202 2013-01-12 21:14 Makefile -rw-r-r- 1 fh fh 76 2013-01-12 21:10 sub.c fhfh:/my_experiment/xt/4zxt/4.4.4$ make gcc -c hello.c gcc -c add.c 共 22 页 5 gcc -c sub.c gcc -o hello hello.o add.o sub.o fhfh:/my_experiment/xt/4zxt/4.4.4$ ./hello