没有合适的资源?快使用搜索试试~ 我知道了~
《嵌入式系统与开发》实验报告+课后作业.doc
需积分: 0 0 下载量 135 浏览量
2023-03-04
19:59:14
上传
评论 2
收藏 784KB DOC 举报
温馨提示
试读
20页
《嵌入式系统与开发》实验报告+课后作业
资源推荐
资源详情
资源评论
南京邮电大学计算机学院《嵌入式系统与开发》实验报告
实验 1 嵌入式开发工具使用实验
一.实验内容
arm-linux-gcc 安装;编译工具 gcc 使用;编写 Makefile 和使用 make 编译;使用 gdb 调试应用程序;使用 code::blocks 进行图形化编程。
二.实验步骤
5.1 交叉编译工具配置及编译
步骤【参看 04- Tiny6410 Linux 开发指南.pdf 文档 1.3.5 节】:
第一步,解压缩交叉编译器工具,命令为:tar xvzf arm-linux-gcc-4.6.4-v6-vfp-20101103.tgz -C/;arm-linux-gcc 可执行文件位于目录
/opt/FriendlyARM/toolchain/4.6.4/bin。
第 二 步 , 修 改 PATH 环 境 变 量 , 将 arm-linux-gcc 可 执 行 文 件 目 录 添 加 到 PATH 环 境 变 量 中 , 命 令 为 : Export
PATH=/root/opt/FriendlyARM/toolschain/4.6.4/bin:$PATH。
第三步,执行 arm-linux-gcc –v 可以看到交叉编译器版本为 gcc version 4.6.4。
5.2 arm-linux-gcc 编译工具使用
【参看相关视频文件及指导书】:
要求:要求编写冒泡排序程序 bubble.c 及其头文件 bubble.h 和主程序 main.c,各文件主要内容如下:
main.c 中定义数组并赋值(数组元素个数和赋值内容可以自己定义),调用 bubble.c 中冒泡排序函数 bubble(int *p,int n)进行排序,
调用输出打印函数 print(int *p,int n)进行输出。
bubble.c 定义 bubble(int *p,int n)和 print(int* p ,int n)函数,分别完成冒泡排序功能和数组输出功能。
bubble.h 完成 bubble.c 中函数的声明。
第一步,在/opt/exp_2 文件夹下按照上述要求编写源码;
第二步,编译
(1)编译源码文件为可执行文件 bubble,命令为:gcc -o bubble main.c bubble.c。
(2)假设在/opt/exp_2 文件夹下新建子目录 include,并将 bubble.h 移到该文件夹下,编译可执行文件 bubble,命令为:gcc -o bubble
main.c bubble.c -I./include。
(3)假如将 bubble.c 编译成动态库 libbubble.so,具体命令为:arm-linux-gcc –shared -fpic -o libbubble.so bubble.c –I./include。
此时利用 libbubble.so 编译可执行文件 bubble,具体命令为:gcc -o bubble main.c -lbubble -L./ -l./include。
思考:如果将 bubble 拷贝到开发板上,执行是否成功?怎样才能成功? 答:如果用 gcc 编译会失败,若要成功需要用 arm-linux-gcc
编译。
(3)可执行程序 bubble 生成过程中,分别使用-O1/-O2/-O3 进行编译,生成的可执行文件名分别为 bublle1 、bubble2 和 bubble3,观
察这几个文件的大小分别为 8784、8784、8784 字节。如果用-g 命令选项生成可执行文件 bubble4,则字节大小为 10392 字节。
思考:为何这几个可执行文件大小有差异 答:因为-o1、-o2、-o3 优化作用不大, -g 编译器在编译的时候会产生调试信息。
5.3 编写 Makefile 和使用 make 工具(按照 5.2 要求,编写 Makefile 文件,要求能够完成源码文件编译和中间文件清除。)
(1)Makefile 如下
SRCS:=$(wildcard *.c)
OBJS:=$(patsubst %.c,%.o,$(SRCS))
CC=gcc
bubble:$(OBJS)
$(CC) –o $@ $(OBJS)
%.o:%.c
$(CC) -g -c -o $@$< -l./include
clean:
rm $(OBJS) bubble
(2)使用 make 工具编译生成可执行文件命令为 make;
(3)清除中间结果命令为 make clean。
5.4 假设按照我们提供的实验源码 bubble.c 和 main.c 生成可执行文件,执行结果为:
the sorted Array is 32766 1 2 3 5 10 32766。
发现执行结果并不符合我们的预期,使用 gdb 进行调试,列出具体步骤如下:(一列下来)
gdb bubble; list bubble list b main Run List next print a[0] next Print a[0] Print a[1] Print a[3] Print a[4] Next
Quit b print b main Run Next Step Next Next quit
南京邮电大学计算机学院《嵌入式系统与开发》实验报告
实验 3 嵌入式数据库 sqlite 移植及使用
一.实验内容
移植嵌入式数据库 sqlite;简单通讯录查询实例设计和测试
二.实验步骤
5.1 移植嵌入式数据库 sqlite
步骤【参看教材 103 页】:
第一步,解压缩 sqlite 源码,命令 tar xvzf sqlite-autoconf-3080900.tar.gz,在解压后的文件夹下,可以看到源码文件有_shell.c__和
__sql3.c___文件,生成 Makefile 的配置脚本文件___./configure --prefix=/opt/sqlite____,并检查当前文件夹下____A___ (A.存在 B.不存
在)Makefile 文件。
第二步利用 configure 脚本文件生成基于 ARM 实验台的 Makefile,具体命令为./configure CC=arm-linux-gcc –prefix=/opt/sqlite
–host=arm-linux(假设安装目录为/opt/sqlite),并检查当前文件夹下___A_(A.存在 B.不存在)Makefile 文件。
第三步,编译 sqlite,命令为_____make______,编译过程中使用的编译器为___arm-linux-gcc_______。
第四步,安装 sqlit,命令为____make insatll___。安装完成后到___\opt\sqlite 文件夹下去查看相关文件,可以看到该文件夹下有
___bin____、____include___、___lib____和 share 文件夹,其中可执行文件 sqlite3 位于__./bin_文件夹,库位于_./lib__文件夹。
第五步,将 sqlite3 拷贝到开发板 bin 目录下,将库下的文件拷贝到开发板的 lib 目录下【注意链接文件的创建】
第六步,数据库的使用 方式 1:命令操纵数据库
在超级终端环境下创建数据库 stucomm.db,命令为__sqilte3 stucomm.db_____;
创建数据表 stutable,字段包括 id 整型,name 字符型,phoneNum 字符型,具体命令为_____create table stutable(id integer ,name
text,phoneNum text)____;
插入 2 条记录,记录信息如下
001,zhangsan,10086
002,lisi,10000
具体命令为___insert into stutable values(1,zhangsan,10086)_;
____insert into stutable values(2,lisi,10000)_;
查询电话号码为 10086 的相关记录信息,命令为__select * from stutable where phoneNum=10086____。
方式 2:编程操纵数据库(使用 C 编程模式完成上述功能,代码如下:)
#include “sqlite3.h”
int main(int argc, char** argv)
{
sqlite3 * db = NULL;
char* zErrMsg = NULL;
int rc;
sqlite3_open( “:memory:”, &db ); //打开内存数据库
rc = sqlite3_exec(db, “create table employee(id integer primary key, age integer);”, NULL, 0, &zErrMsg); //创建数据库
for( int i= 0; i < 10; i++ )
{
statement = sqlite3_mprintf( "insert into employee values(%d, %d);”, NULL, 0, &zErrMsg, rand()%65535, rand()%65535 );
rc = sqlite3_exec( db, statement, NULL, 0 , 0 ); //插入数据
sqlite3_free( statement );
}
rc = sqlite3_exec(db, “select * from employee;” , callback, 0, &zErrMsg ); //查询,并调用回调函数
sqlite3_close(db);
}
假 设 上 述 代 码 文 件 名 为 sqlite_exp.c 文 件 , 编 译 命 令 为 __arm-linux-gcc -o sqlite_exp sqlite_exp.c___ , 其 中 头 文 件 位 于
/opt/sqlite/include,库位于/opt/sqlite/lib 下。
南京邮电大学计算机学院《嵌入式系统与开发》实验报告
实验 2 构建嵌入式 Linux 系统
一.实验内容
配置和编译 UBOOT;裁剪和编译内核;制作文件系统
二.实验步骤
5.1 UBOOT 配置及编译
第一步,解压缩 uboot 源码,命令 tar xzvf _u-boot-mini6410-20111018.tar.gz,在解压后的文件夹下,可以看到 Makefile 文件,
是整个 uboot 源码包编译的总 Makefile,负责整个 uboot 的裁剪、编译等过程。
第二步,实验设备使用 128M 内存,处理器采用 S3C6410,生成配置文件命令为 make mini6410_nand_config-ram128 。
第三步,编译 UBOOT 命令为_make_,编译完成后生成 uboot.bin,该文件存储在/opt/FrendlyARM/u-boot-mini6410 目录下。
5.2 内核裁剪及编译
第一步,解压缩 Linux 内核源码,命令 tar xzvf linux-2.6.38-20141014.tgz,在解压缩后的文件夹下,可以看到 Makefile 文件,
是整个 Linux 内核源码包编译的总 Makefile,负责整个 Linux 内核的裁剪和编译工作。
第二步,内核源码裁剪
方式 1:通常情况下 linux 根目录下有个.config 文件,该文件是宏文件,每个宏和一定的源码文件关联,如果注释掉相应宏,则对
应源码将不会被编译进 linux 内核映像文件中。
实验 1----打开该文件可以选择注释掉部分宏,如 CONFIG_NET=y,重新编译会发现内核文件 zImage 大小为__3M__字节,或者
到 net 目录下发现所有的 c 文件__B__(A.被编译 B.未被编译)。
实验 2----重新打开.config 文件,取消注释宏 CONFIG_NET=y,重新编译会发现内核文件 zImage 大小为___2.985M__字节,或者
到 net 目录下发现所有的 c 文件__A__(A.被编译 B.未被编译),且 net 目录下的所有被编译后的目标文件被连接成一个目标文件-
__built-in-o_。
方式 2:在 shell 环境下,进入内核源码顶层目录,执行命令___make menuconfig___命令,进入图形环境下裁剪 Linux 内核。找
到“网络支持选项”,按空格键取消选择,并保存退出,重新打开.config 文件,发现宏 CONFIG_NET 是否被定义__B__(A. 被定义
B.被注释 ),重新编译会发现内核文件 zImage 大小为___2.985M__字节,或者到 net 目录下发现所有的 c 文件__B__(A.被编译 B.未被
编译)。
第 三 步 , 编 译 内 核 , 命 令 为 __make zImage___ , 编 译 完 成 后 生 成 zImage, 该 文 件 存 储 在
/opt/FrendlyARM/u-boot-mini6410/arch/arm/boot 目录下。
5.3 内核添加自己代码的方式(本例以添加一个 RC4 加密算法为例来进行)
第一步,找到内核源码存放加密算法的文件夹,位于/opt/FrendlyARM/linux-2.6.38/crypt 目录
第二步,在该目录下编写代码 rc4.c 文件,文件仅简单包含如下内容
#include <linux/kernel.h>
void rc4ENCrypt()
{
printk("THIS IS A SIMPLE TEST,NO USE\n");
return;
}
第三步,打开该文件夹下 Kconfig 文件,添加如下代码【红色加粗斜体部分】
if CRYPTO
comment "Crypto core or helper"
config RC4ENCRYPT
bool "RC4 ENCRYPT SUPORT"
help
this is a simple test ,no use
第四步,执行 make menuconfig,在其中找到"RC4 ENCRYPT SUPORT"选项,并选中,退出配置,在.config 文件中,__A__(A.
有 B.没有)宏 CONFIG_RC4ENCRYPT。
第五步,打开 crypt 目录下的 Makefile 文件,添加如下代码【红色加粗斜体部分】
obj-$(CONFIG_CRYPTO_WORKQUEUE) += crypto_wq.o
obj-$(CONFIG_CRYPTO_FIPS) += fips.o
obj-$(CONFIG_RC4ENCRYPT) +=rc4.o
剩余19页未读,继续阅读
资源评论
柔蓝一水萦花草_
- 粉丝: 3023
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于pytorch+Unet进行MRI肝脏图像分割源码+数据集+模型.zip
- 在Android Studio中开发一个Android App项目步骤
- 基于yolov8实现进行物体跟踪源码.zip
- Java多线程学习Java多线程学习Java多线程学习Java多线程学习.txt
- 算法数据结构-动态规划算法(Dynamic Programming)超详细总结加应用案例讲解.txt
- 2024最强秋招八股文(精简、纯手打)2024最强秋招八股文(精简、纯手打).txt
- 基于tensorflow多特征融合的微表情识别python源码.zip
- 基于yolov8实现人脸检测的python源码+运行说明.zip
- Micron Memory DDR3 SDRAM 全系列AD集成库(原理图库+PCB封装库).IntLib
- 基于tensorflow多特征融合的微表情识别python源码+详细使用说明.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功