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

相关文章
|
6月前
|
Java Unix Go
【Java】(8)Stream流、文件File相关操作,IO的含义与运用
Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。!但本节讲述最基本的和流与 I/O 相关的功能。我们将通过一个个例子来学习这些功能。
264 1
|
9月前
|
存储 数据管理 Linux
区分Linux中.tar文件与.tar.gz文件的不同。
总之,".tar"文件提供了一种方便的文件整理方式,其归档但不压缩的特点适用于快速打包和解压,而".tar.gz"文件通过额外的压缩步骤,尽管处理时间更长,但可以减小文件尺寸,更适合于需要节约存储空间或进行文件传输的场景。用户在选择时应根据具体需求,考虑两种格式各自的优劣。
1456 13
|
10月前
|
安全 Linux
Linux赋予文件000权限的恢复技巧
以上这些步骤就像是打开一扇锁住的门,步骤看似简单,但是背后却有着严格的逻辑和规则。切记,在任何时候,变更文件权限都要考虑安全性,不要无谓地放宽权限,那样可能
288 16
|
11月前
|
Linux
【Linux】 Linux文件I/O常见操作技巧
以上就是Linux文件I/O操作的一些技巧,接纳它们,让它们成为你在Linux世界中的得力伙伴,工作会变得轻松许多。不过记住,技巧的运用也需要根据实际情况灵活掌握,毕竟,最适合的才是最好的。
298 28
|
10月前
|
XML JSON Go
Go语言中的文件与IO:JSON、CSV、XML处理
本文介绍了 Go 语言中对 JSON、CSV 和 XML 三种常见数据格式的处理方法。通过标准库 `encoding/json`、`encoding/csv` 和 `encoding/xml`,可以实现结构体与数据格式之间的序列化与反序列化。JSON 适合 Web API 和前后端通信,因其清晰易读;CSV 适用于表格数据和轻量级交换;XML 则支持复杂嵌套结构,常用于配置文件和 SOAP 协议。文中提供代码示例,涵盖基本使用、嵌套结构处理及实战建议,帮助开发者高效操作这些格式。
|
10月前
|
存储 Linux 数据处理
深入剖析Linux中一切即文件的哲学和重定向的机制
在计算机的奇妙世界中,Linux的这套哲学和机制减少了不同类型资源的处理方式,简化了抽象的概念,并蕴藏着强大的灵活性。就像变戏法一样,轻轻松松地在文件、程序与设备之间转换数据流,标准输入、输出、错误流就在指尖舞动,程序的交互和数据处理因此变得既高效又富有乐趣。
172 4
|
10月前
|
Unix Go
Go语言中的文件与IO:文件读写
本文介绍了 Go 语言中文件操作的基础方法,涵盖打开与关闭文件、读取和写入文件内容、追加写入以及复制文件等功能。通过 `os`、`bufio` 和 `io` 等标准库包,提供了高效且灵活的实现方式,如使用 `os.ReadFile` 读取整个文件、`bufio.Scanner` 逐行读取、`os.Create` 创建文件以及 `io.Copy` 复制文件内容。同时强调了错误处理的重要性,例如使用 `defer` 确保文件关闭,并推荐注意文件权限设置(如 UNIX 系统中的 `0644`)。最后以表格形式总结了常用操作及其推荐方法,便于快速查阅和应用。
|
10月前
|
Go 数据处理
Go语言中的文件与IO:bufio 和 scanner
Go 标准库中的 `bufio` 包高效读写功能,适用于文件和数据处理。`bufio.Reader` 支持按行或分隔符读取,`bufio.Writer` 提供高性能写入并需调用 `Flush()` 确保数据写入。`bufio.Scanner` 是处理文本文件(如日志、配置)的利器,可按行、单词等分割内容。本文详解其用法,并给出实践建议,如统计字符数、模拟 `tail -f` 和词频分析等。
|
11月前
|
Ubuntu Linux
"unzip"命令解析:Linux下如何处理压缩文件。
总的来说,`unzip`命令是Linux系统下一款实用而方便的ZIP格式文件处理工具。本文通过简明扼要的方式,详细介绍了在各类Linux发行版上安装 `unzip`的方法,以及如何使用 `unzip`命令进行解压、查看和测试ZIP文件。希望本文章能为用户带来实际帮助,提高日常操作的效率。
2458 12
|
10月前
|
Linux
linux文件重命名命令
本指南介绍Linux文件重命名方法,包括单文件操作的`mv`命令和批量处理的`rename`命令。`mv`可简单更改文件名并保留扩展名,如`mv old_file.txt new_name.txt`;`rename`支持正则表达式,适用于复杂批量操作,如`rename 's/2023/2024/' *.log`。提供实用技巧如大小写转换、数字序列处理等,并提醒覆盖风险与版本差异,建议使用`-n`参数预览效果。

热门文章

最新文章