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

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

实验目的

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盘印证交叉编译结果。

相关文章
|
3月前
|
Java Unix Go
【Java】(8)Stream流、文件File相关操作,IO的含义与运用
Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。!但本节讲述最基本的和流与 I/O 相关的功能。我们将通过一个个例子来学习这些功能。
216 1
|
7月前
|
XML JSON Go
Go语言中的文件与IO:JSON、CSV、XML处理
本文介绍了 Go 语言中对 JSON、CSV 和 XML 三种常见数据格式的处理方法。通过标准库 `encoding/json`、`encoding/csv` 和 `encoding/xml`,可以实现结构体与数据格式之间的序列化与反序列化。JSON 适合 Web API 和前后端通信,因其清晰易读;CSV 适用于表格数据和轻量级交换;XML 则支持复杂嵌套结构,常用于配置文件和 SOAP 协议。文中提供代码示例,涵盖基本使用、嵌套结构处理及实战建议,帮助开发者高效操作这些格式。
|
7月前
|
Unix Go
Go语言中的文件与IO:文件读写
本文介绍了 Go 语言中文件操作的基础方法,涵盖打开与关闭文件、读取和写入文件内容、追加写入以及复制文件等功能。通过 `os`、`bufio` 和 `io` 等标准库包,提供了高效且灵活的实现方式,如使用 `os.ReadFile` 读取整个文件、`bufio.Scanner` 逐行读取、`os.Create` 创建文件以及 `io.Copy` 复制文件内容。同时强调了错误处理的重要性,例如使用 `defer` 确保文件关闭,并推荐注意文件权限设置(如 UNIX 系统中的 `0644`)。最后以表格形式总结了常用操作及其推荐方法,便于快速查阅和应用。
|
7月前
|
Go 数据处理
Go语言中的文件与IO:bufio 和 scanner
Go 标准库中的 `bufio` 包高效读写功能,适用于文件和数据处理。`bufio.Reader` 支持按行或分隔符读取,`bufio.Writer` 提供高性能写入并需调用 `Flush()` 确保数据写入。`bufio.Scanner` 是处理文本文件(如日志、配置)的利器,可按行、单词等分割内容。本文详解其用法,并给出实践建议,如统计字符数、模拟 `tail -f` 和词频分析等。
|
11月前
|
Ubuntu Linux 编译器
linux下交叉编译licensecc
通过本文的步骤,您可以在Linux环境下成功交叉编译LicenseCC。本文详细介绍了环境准备、工具链安装、源代码下载、CMake配置、编译和验证的全过程。希望这些内容对您的学习和工作有所帮助。
388 62
|
7月前
|
Linux C语言 网络架构
Linux的基础IO内容补充-FILE
而当我们将运行结果重定向到log.txt文件时,数据的刷新策略就变为了全缓冲,此时我们使用printf和fwrite函数打印的数据都打印到了C语言自带的缓冲区当中,之后当我们使用fork函数创建子进程时,由于进程间具有独立性,而之后当父进程或是子进程对要刷新缓冲区内容时,本质就是对父子进程共享的数据进行了修改,此时就需要对数据进行写时拷贝,至此缓冲区当中的数据就变成了两份,一份父进程的,一份子进程的,所以重定向到log.txt文件当中printf和fwrite函数打印的数据就有两份。此时我们就可以知道,
121 0
|
7月前
|
存储 Linux Shell
Linux的基础IO
那么,这里我们温习一下操作系统的概念我们在Linux平台下运行C代码时,C库函数就是对Linux系统调用接口进行的封装,在Windows平台下运行C代码时,C库函数就是对Windows系统调用接口进行的封装,这样做使得语言有了跨平台性,也方便进行二次开发。这就是因为在根本上操作系统确实像银行一样,并不完全信任用户程序,因为直接开放底层资源(如内存、磁盘、硬件访问权限)给用户程序会带来巨大的风险。所以就向银行一样他的服务是由工作人员隔着一层玻璃,然后对顾客进行服务的。
105 0
|
11月前
|
存储 网络协议 Linux
【Linux】进程IO|系统调用|open|write|文件描述符fd|封装|理解一切皆文件
本文详细介绍了Linux中的进程IO与系统调用,包括 `open`、`write`、`read`和 `close`函数及其用法,解释了文件描述符(fd)的概念,并深入探讨了Linux中的“一切皆文件”思想。这种设计极大地简化了系统编程,使得处理不同类型的IO设备变得更加一致和简单。通过本文的学习,您应该能够更好地理解和应用Linux中的进程IO操作,提高系统编程的效率和能力。
498 34
|
11月前
|
Ubuntu Linux 编译器
linux下交叉编译licensecc
通过本文的步骤,您可以在Linux环境下成功交叉编译LicenseCC。本文详细介绍了环境准备、工具链安装、源代码下载、CMake配置、编译和验证的全过程。希望这些内容对您的学习和工作有所帮助。
241 5
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。