飞道的博客

Linux----嵌入式交叉编译环境 底层文件IO操作

465人阅读  评论(0)

实验目的

1.掌握烧录最小 Linux 系统方法;

2.掌握文件 IO 打开文件 open 函数;

3.掌握文件 IO 写文件 write 函数;

4.掌握文件 IO 读文件 read 函数;

实验设备

PC 计算机(可以上网),虚拟机软件
VMware-workstation-full-10.0.1,

Ubuntul2.4 虚拟机镜像文件。

实验步骤

1:嵌入式开发环境的搭建(烧录最小Linux系统)

(1)通过串口线连接计算机并使用串口软件使嵌入式平台与计算机连接。

(2)由于嵌入式平台使用安卓系统,则使用fastboot 进行底层刷机。
在对安卓系统下开发板进行 boot初始化过程中,经过查阅资料学习到了通过 fatformatmmc 指令进行 fat 分区格式化,通过 ext3format 进行 ext3 分区格式化,然后在 Linux 最小系统下通过 fastboot指令以及 Windows 系统下调用 fastboot 进行镜像文件的烧录。

(3)通过下载驱动使计算机识别刷机后的嵌入式平台。( 如不下载驱动则无法进行上面镜像文件的下载)

(4)对嵌入式平台进行不同格式下的格式化。

(5)使用 OTG进行最小系统文件的烧录。

(6)
使用串口软件印证是否刷机成功
(7)
通过修改参数文件将编译嵌入式 Linux的工具所在目录添加到 PATH环境变量中 。
(8)使用嵌入式 Linux工具编译程序并分别验证是否能在 pc平台和嵌入式平台运行 。

2:打开文件函数open

1、open函数解释

open 函数可以建立一个到文件或者设备的访问路径。 在打开或创建文件时可以制定文件的属性及用户的权限等各种参数。

第一个参数 path 表示:路径名或者文件名。路径名为绝对路径名,例如开发板中的
led 驱动的设备 /dev/leds。

第二个参数 oflags 表示:打开文件所采取的动作。

2、open函数代码
main 函数如下

程序中打开了三个文件分别属于不同的情况。

/dev/leds 已经在开发板中存在,属于驱动的设备节点,/bin/test1 和

/bin/test2 都不存在。

使用 open 函数调用上面三个文件,如果出错就会打印错误,然后打印句柄。

3、交叉编译下载运行测试

给定实验参考程序open.c,通过使用命令”arm-none-linux-gnueabi-gcc
-o open open.c -static” 编译open文件,并通过SSH将输出文件从虚拟机内传输至U盘中,使用U盘印证交叉编译结果。

最终实验结果如图所示

3、写文件函数write

1、write函数解释

write()函数是用于向打开的文件写数据。

参数 fd,使用
open 函数打开文件之后返回的句柄。

参数*buf,需要写入的数据。

参数 count,将参数*buf
中最多 count 个字节写入文件中。返回值为 size 类型,出错会返回-1,其它数值表示实际写入的字节数。

2、write函数代码 main 函数如下
**
**
在 16 行定义了
buffer_write 字符数组。

在 18 行,进行写操作之前,必须得到文件的句柄,在这一行中使用
open 函数创建和打开文件”/bin/testwrite"。


23 行中会调用 write 函数,将 buffer_write 字符数组中的内容写到新

建的文件中。在
31 行调用 close 函数,将"/bin/testwrite"文件关闭。

后面测试的时候可以在超级终端中, 使用
vi 编辑器打开"/bin/testwrite"文

件,可以看到这个文件中有字符
Hello Write Function!.

3、交叉编译下载运行测试

给定实验参考程序write.c,通过使用命令”arm-none-linux-gnueabi-gcc
-o write

write.c
-static” 编译write文件,并通过SSH将输出文件从虚拟机内传输至U盘中,使用U盘印证交叉编译结果。

最终实验结果如图所示

4:读文件函数read

1、read函数解释
read()函数是用于向打开的文件写数据。

参数 fd,使用
open 函数打开文件之后返回的句柄。参数*buf,读出的数据保存的位置。

参数 len,每次最多读
len 个字节。返回值为 ssize 类型,出错会返回-1,

其它数值表示实际写入的字节数,返回值大于 0 小于 len 的数值都是正常的。

2、read函数代码
main 函数如下


20 行,使用 open 函数打开或者新建"/bin/testwrite"文件。


23 行, 使用 write 函数将 buffer 中的内容写到"/bin/testwrite"文件

中。

在 35 行,使用 read 函数,将"/bin/testwrite"文件中的内容读出来。在 38 行,使用打印函数 printf 打印 read 函数读出的数据。

最终测试的时候,除了会出现"/bin/testwrite"文件,还会打印 read 函数读取的数据。

3、交叉编译下载运行测试

给定实验参考程序read.c,通过使用命令”arm-none-linux-gnueabi-gcc
-o read

read.c
-static” 编译read文件,并通过SSH将输出文件从虚拟机内传输至U盘中,使用U盘印证交叉编译结果。


转载:https://blog.csdn.net/weixin_45706856/article/details/117378652
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场