首页 >>  正文

linux下tar解压

来源:baiyundou.net   日期:2024-09-23

之前小编为大家介绍过在飞凌嵌入式i.MX6ULL开发板上操作GPIO的方法。本期,让我们一起走近i.MX9352处理器,深入了解这位i.MX系列新成员的GPIO该如何操作,以及它与前辈i.MX6ULL处理器又有哪些异同。

01 硬件原理分析

以点灯和按键为例,打开飞凌嵌入式OK-MX9352-C开发板的原理图,可以看到一颗LED灯,它由MX93_PAD_CCM_CLKO4控制。由于这一个GPIO属于1.8V电平域,所以在OK-MX9352-C开发板的底板上并没有直接将GPIO接到LED上,而是用GPIO控制了一个MOS管,再由MOS管去控制LED的亮灭——当GPIO电平为高时,MOS导通,LED点亮;当GPIO电平为低时,MOS关断,LED熄灭。

02 设备树引脚复用

打开飞凌嵌入式OK-MX9352-C开发板的设备树:

OKMX93-linux-kernel/arch/arm64/boot/dts/freescale/OK-MX93-C.dts

在iomuxc节点下新建一组引脚复用,复用的两个GPIO分别是底板上的LED灯D6和按键K1。

接下来新建一个GPIO节点,内容如下:

注释掉LED和KEY部分,防止复用冲突:

保存退出后重新编译设备树。

执行环境变量:

forlinx@ubuntu:~/ok-mx93/OKMX93-linux-sdk$ . environment-setup-aarch64-toolchain

单独编译设备树:

forlinx@ubuntu:~/ok-mx93/OKMX93-linux-sdk/OKMX93-linux-kernel$ make ARCH=arm64 CROSS_COMPILE=aarch64-poky-linux- dtbs

编译完成后,单独更新设备树。首先将U盘插到虚拟机上,将生成的设备树文件拷贝到U盘:

forlinx@ubuntu:~/ok-mx93/OKMX93-linux-sdk/OKMX93-linux-kernel$ cp arch/arm64/boot/dts/freescale/OK-MX93-C.dtb /media/forlinx/2075-A0A7/

将生成的dtb文件使用U盘拷贝到OK-MX9352-C开发板上,替换掉:/run/media/Boot-mmcblk0p1/OK-MX93-C.dtb

root@ok-mx93:/run/media/Boot-mmcblk0p1# cp /run/media/sda/OK-MX93-C.dtb ./

重启OK-MX9352-C开发板。

03 通过命令测试

在OKMX6ULL-S开发板中,操作GPIO的方式是通过操作/sys/class/gpio下的文件来实现的。而在OK-MX9352-C上,引入了新的Lingpiod的方式,而原有的基于sysfs的操作方式已经不再被支持。

Libgpiod是一种字符设备接口,GPIO访问控制是通过操作字符设备文件(比如/dev/gpiodchip0)实现的。OK-MX9352-C共有4组GPIO,可以在/dev下查看GPIO设备文件。

Libgpiod可以通过shell终端和C库两种方式使用,本节介绍在shell终端控制GPIO的方法,下一节我们将会介绍使用C库的方式控制GPIO。

3.1 gpiodetect

查看所有GPIO设备

这里的gpiochip0- gpiochip4分别对应的是设备树当中的GPIO1-GPIO4这四组GPIO,但是顺序并不是一一对应的,这是由于对应的寄存器地址顺序问题导致的。那么goiochip0如何跟设备树对应起来呢?我们可以打开设备树当中的dtsi文件,文件路径为:

OKMX93-linux-kernel/arch/arm64/boot/dts/freescale/imx93.dtsi

forlinx@ubuntu:~/ok-mx93/OKMX93-linux-sdk$ vi OKMX93-linux-kernel/arch/arm64/boot/dts/freescale/imx93.dtsi

查看GPIO3的寄存器基地址为:gpio3: gpio@43820080,对应的是gpiochip1,而GPIO4对应的是gpiochip2。

其余GPIO的对应关系如下,可供大家参考:

3.2 gpioinfo

由3.1可知,LED灯对应的是GPIO4,即gpiochip2;按键对应的是GPIO3,即gpiochip1。列出gpiochip2控制器的引脚情况:

3.3 gpioset

该命令用于设置GPIO电平,2代表gpiochip2,即GPIO4,28是GPIO pin,当设置该GPIO为1时,底板上的D6点亮。

3.4 gpioget

该命令用于获取GPIO引脚状态,以按键为例,按键对应的是GPIO3-27,即gpiochip1 27。按键没有按下时,读取到按键状态为1,当按键按下时,读到按键状态为0。

3.5 gpiomon

监控GPIO的状态是否发生变化,同样以按键为例,当按键按下时:

04 使用Libgpiod库编程

Libgpiod是用于与Linux GPIO交互的C库和工具,Linux官方于Linux 4.8 版本引入了Libgpiod的功能。而在OK-MX9352-C开发板搭载的Linux5.15内核版本中,已经不再支持sysfs的方式操作GPIO。与sysfs相比,Libgpiod更加可靠,具备更多功能,例如,可一次读写多个GPIO值。

4.1 源码获取

如果想要在PC上交叉编译出能够在开发板上运行的应用,则交叉编译时链接的库文件应该与开发板上的保持一致,可以直接把开发板上的库拷贝到开发环境进行使用。该库文件在开发板上的路径为:

从上图可以看出,Libgpiod库的版本为libgpiod.so.2.2.2,软链接到libgpiod.so.2。

在飞凌嵌入式提供的OK-MX9352-C开发板资料中,已经将所需的库文件、头文件以及相关例程进行了打包,用户可以直接使用。资料路径为:用户资料/应用笔记/ OK-MX9352-C-GPIO接口_Linux应用笔记/Libgpiod测试源码

4.2 编译测试例程

将Libgpiod测试源码目录下的gpiotest.c、gpio-toggle.c、lib.tar.bz2拷贝到开发环境中:

将lib.tar.bz2解压到本目录下,编译时会使用到里边的gpiod.h文件和Libgpiod库文件:

示例1

循环控制LED亮和灭,时间间隔为1s

交叉编译gpio-toggle.c

设置环境变量(注意 . 后边有空格)

交叉编译

将可执行文件gpio-toggle拷贝到开发板中并执行可看到LED(D6)灯1s亮,1s灭。其中输入参数2、28为:gpiochip2 line28。

示例2

按键控制LED亮灭,每按一次状态翻转

交叉编译gpio-test.c

设置环境变量(注意点后边有空格)

交叉编译

将可执行文件gpio-test拷贝到OK-MX9352-C开发板中并执行,可看到每按一次按键,LED灯的状态就翻转一次,其中输入参数1、27为:gpiochip1 line27 ;2、28为:gpiochip2 line28。

以上就是为OK-MX9352-C开发板配置GPIO的过程,希望能够对屏幕前的各位工程师小伙伴有所帮助。

","gnid":"9413e3aee5bb6f83f","img_data":[{"flag":2,"img":[{"desc":"","height":"427","title":"","url":"https://p0.ssl.img.360kuai.com/t015d3a48910555fe15.jpg","width":"640"},{"desc":"","height":"348","title":"","url":"https://p0.ssl.img.360kuai.com/t01eb7fd3bd9f63c6cf.jpg","width":"640"},{"desc":"","height":"285","title":"","url":"https://p0.ssl.img.360kuai.com/t01cd712824a7fd364f.jpg","width":"640"},{"desc":"","height":"115","title":"","url":"https://p0.ssl.img.360kuai.com/t01b5bc4dfc38109299.jpg","width":"640"},{"desc":"","height":"205","title":"","url":"https://p0.ssl.img.360kuai.com/t015f482769de47b62f.jpg","width":"640"},{"desc":"","height":"662","title":"","url":"https://p0.ssl.img.360kuai.com/t013ad81e4faa8f5f7d.jpg","width":"640"},{"desc":"","height":"109","title":"","url":"https://p0.ssl.img.360kuai.com/t017d108892db37e310.jpg","width":"640"},{"desc":"","height":"627","title":"","url":"https://p0.ssl.img.360kuai.com/t0170902ec13ecc0414.jpg","width":"640"},{"desc":"","height":"198","title":"","url":"https://p0.ssl.img.360kuai.com/t01b3c2e94616883cab.jpg","width":"640"},{"desc":"","height":"604","title":"","url":"https://p0.ssl.img.360kuai.com/t010d1f3050ca3990d5.jpg","width":"640"},{"desc":"","height":"101","title":"","url":"https://p0.ssl.img.360kuai.com/t0102e6cf3404d91aa0.jpg","width":"640"},{"desc":"","height":"106","title":"","url":"https://p0.ssl.img.360kuai.com/t01c9dda2a4b2144d8b.jpg","width":"640"},{"desc":"","height":"181","title":"","url":"https://p0.ssl.img.360kuai.com/t013d491ec03561af9d.jpg","width":"640"}]}],"original":0,"pat":"art_src_1,fts0,sts0","powerby":"hbase","pub_time":1686770324000,"pure":"","rawurl":"http://zm.news.so.com/f69db66c2b871f4e4b76d40a57a007b7","redirect":0,"rptid":"74f46cc3f4ef0ee2","rss_ext":[],"s":"t","src":"飞凌嵌入式","tag":[{"clk":"kdigital_1:linux","k":"linux","u":""}],"title":"飞凌嵌入式技术帖——i.MX9352的GPIO怎么用?

孔金学1195linux tar.xz怎么解压 -
屠皆莎13296253587 ______ 首先,你的linux下要安装一个叫xz的工具.把tar.xz,解压成为tar其次,再把tar文件解压出来. 至于xz的安装不多说了,如果用ubuntu,看看apt-get的源里面有没有,要是fedora 、centos等等就找找yum源. tar.xz解压为tar使用如下指令: xz -d ...

孔金学1195如何在Linux下解压tar.lz文件 -
屠皆莎13296253587 ______ .tar.gz .tar.bz2要解压很简单 : .tar.gz 格式解压为 tar -zxvf xx.tar.gz .tar.bz2 格式解压为 tar -jxvf xx.tar.bz2 .tar.xz .tar.lz复杂一点: .tar.xz的解压方法: xz -d mpfr-3.1.2.tar.xz 会产生一个mpfr-3.1.2.tar 文件,再执行 tar -xvf mpfr-3.1.2.tar .tar.lz的解压方...

孔金学1195在linux下怎样把电脑桌面上的文档压缩成tar.gz格式? -
屠皆莎13296253587 ______ 你搞笑啦~ 首先确定你windows下的C盘挂载在哪个目录下,然后切过去 比如说挂载到了 /media/windows_c 那就是 cd /media/windows_c/Users/hp/Desktop/ 注意linux严格区分大小写.... 检查挂载的分区, 我习惯用 df 命令.挂载分区用 mount 打包文件用 tar 具体参数请自己查阅文档…… 我五一换了Y470,还在观望linux下的显卡驱动,Nvidia不给力啊 等Fedora15和Mandriva2011... 考虑是不是先弄虚拟机上linux…… 暂时用着server 2008 R2 ,所以没条件帮你试了.

孔金学1195请问在linux 下如何解压不同目录下的多个.tar包,最好能解压源tar包当前所在的目录 -
屠皆莎13296253587 ______ tar前面是gz,tar -xzfv 文件名 -C 你要到的目录 tar前面是bz,tar -xjfv 文件名 -C 你要到的目录

孔金学1195在linux环境下如何安装tar.gz的解压工具 -
屠皆莎13296253587 ______ tar.gz 是先通过 tar打包后gzip压缩形成的 嵌入式linux一般都会使用busybox 来作为基本工具集 标准busybox是有tar和gzip工具的,但使用上会和普通linux上的tar命令上有一定区别 具体请参考命令的帮助 先用gunzip 解压生成 tar文件 然后...

孔金学1195linux 中如何解压文件(比如.tar.gz 用tar -
屠皆莎13296253587 ______ tar -xzvf .tar.gz tar [-cxtzjvfpPN] 文件与目录 .... 参数: -c :建立一个压缩文件的参数指令(create 的意思); -x :解开一个压缩文件的参数指令! -t :查看 tarfile 里面的文件! 特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在! ...

孔金学1195linux 下压缩tar.bz2 -
屠皆莎13296253587 ______ 原因是仔细看看tar的语法就明白了 f 后面一定要紧跟文件名,其它的倒无所谓.所以你的问题方向不是j参数 而是f参数. f参数一定要在最后 并且跟着文件名tar语法 tar { -c | -r | -t | -u | -x } [ -b Blocks ] [ -B ] [ -d ] [ -F ] [ -h ] [ -i ] [ -L InputList ] [ -l ] [ -m ] [ -...

孔金学1195Linux怎么使用压缩和解压到指定目录的命令 -
屠皆莎13296253587 ______ 命令格式:tar -zxvf 【压缩包文件名.tar.gz】 -C 【路径】/ 注释:解压.tar.gz格式到指定的目录下 例如:tar -zxvf japan.tar.gz -C /tmp/ 命令格式:tar -jxvf 【压缩包文件名.tar.bz2】 -C 【路径】/ 注释:解压.tar.bz2格式到指定的目录下 例如:tar -zxvf ...

孔金学1195linux下怎样使用tar命令解压缩名称中不包括“ - ”字符的其他压缩文件 -
屠皆莎13296253587 ______ linux中,如何使用tar进行解压缩环境:windows 7 + virtualboax + fedora 15 kde可以使用tar命令解压缩.tar.gz文件,下面以解压缩qt源文件举例:1.在windows中将qt源文件拷贝到共享文件夹下2.在fedora 15中,进入到共享文件下,共享文件会自...

孔金学1195linux下的三种解压文件的命令? -
屠皆莎13296253587 ______ 那要看你的压缩文件使用哪种压缩方式: gzip,压缩文件名:zip或gz,解压命令:unzip bzip2,压缩文件名:bz,解压命令;bzip2 -d 上面两个是最常用的压缩方式,一般在linux下可以通过tar命令实现打包和压缩(或解压).例如: tar -zcvf file...

(编辑:自媒体)
关于我们 | 客户服务 | 服务条款 | 联系我们 | 免责声明 | 网站地图 @ 白云都 2024