根文件系统rootfs构建

这篇具有很好参考价值的文章主要介绍了根文件系统rootfs构建。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、根文件系统简介

根文件系统一般也叫做 rootfs,Linux 中的根文件系统更像是一个文件夹或者叫做目录,在这个目录里面会有很多的子目录。根目录下和子目录中会有很多的文件,这些文件是 Linux 运行所必须的,比如库、常用的软件和命令、设备文件、配置文件等等。就像windows的系统盘一样

根文件系统首先是内核启动时所 mount(挂载)的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行

在构建根文件系统之前,我们先来看一下根文件系统里面大概都有些什么内容,以 Ubuntu
为例,根文件系统的目录名字为‘/’ ,如下图

rootfs,# 移植IMX6ULL官方的uboot/Linux,linux,arm,arm开发

 1、 /bin 目录

此目录下存放着系统需要的可执行文件,一般都是一些命令,比如 ls、 mv 等命令。此目录下的命令所有的客户都可以使用

2、/dev 目录

dev 是 device 的缩写,所以此目录下的文件都是和设备有关的,此目录下的文件都是设备文件。在 Linux 下一切皆文件,即使是硬件设备,也是以文件的形式存在的。

比如/dev/ttymxc0(I.MX6ULL 根目录会有此文件)就表示 I.MX6ULL 的串口 0,要想通过串口 0发送或者接收数据就要操作文件/dev/ttymxc0,通过对文件/dev/ttymxc0 的读写操作来实现串口0 的数据收发

3、 /etc 目录

此目录下存放着各种配置文件

4、 /lib 目录

lib 是 library 的简称,也就是库的意思,因此此目录下存放着 Linux 所必须的库文件。这些库文件是共享库,命令和用户编写的应用程序要使用这些库文件。

5、 /mnt 目录

临时挂载目录,一般是空目录,可以在此目录下创建空的子目录,比如/mnt/sd、 /mnt/usb,这样就可以将 SD 卡或者 U 盘挂载到/mnt/sd 或者/mnt/usb 目录中

6、 /proc 目录

此目录一般是空的,当 Linux 系统启动以后会将此目录作为 proc 文件系统的挂载点, proc是个虚拟文件系统,没有实际的存储设备。 proc 里面的文件都是临时存在的,一般用来存储系统运行信息文件

7、 /usr 目录

usr 不是 user 的缩写,而是 Unix Software Resource 的缩写,也就是 Unix 操作系统软件资源目录。这里有个小知识点,那就是 Linux 一般被称为类 Unix 操作系统,苹果的 MacOS也是类 Unix 操作系统。既然是软件资源目录,因此/usr 目录下也存放着很多软件,一般系统安装完成以后此目录占用的空间最多

8、 /var 目录

此目录存放一些可以改变的数据

9、 /sbin 目录

此目录页用户存放一些可执行文件,但是此目录下的文件或者说命令只有管理员才能使用,主要用系统管理

10、 /sys 目录

统启动以后此目录作为 sysfs 文件系统的挂载点, sysfs 是一个类似于 proc 文件系统的特殊文件系统, sysfs 也是基于 ram 的文件系统,也就是说它也没有实际的存储设备。此目录是系统设备管理的重要目录,此目录通过一定的组织结构向用户提供详细的内核数据结构信息

11、 /opt

可选的文件、软件存放区,由用户选择将哪些文件或软件放到此目录中。

关于 Linux 的根目录就介绍到这里

二、BusyBox 构建根文件系统

1 BusyBox 简介

名字分为“Busy”和“Box”,也就是忙碌的盒子。盒子是用来放东西的,忙碌的是因为它要提供根文件系统所需的文件,所以忙碌。 BusyBox 是一个集成了大量的 Linux 命令和工具的软件,像 ls、 mv、 ifconfig 等命令 BusyBox 都会提供。 BusyBox 就是一个大的工具箱,这个工具箱里面集成了 Linux 的许多工具和命令。一般下载 BusyBox 的源码,然后配置 BusyBox,选择自己想要的功能,最后编译即可

BusyBox 可以在其官网下载到,官网地址为: BusyBoxhttps://www.busybox.net/在官网左侧的“Get BusyBox”栏有一行“Download Source”,点击“Download Source”即可打开 BusyBox 的下载

2 编译 BusyBox 构建根文件系统

一般在 Linux 驱动开发的时候都是通过 nfs 挂载根文件系统的,当产品最终上市开卖的时候才会将根文件系统烧写到 EMMC 或者 NAND 中

这里把rootfs解压后的文件放rootfs目录里

rootfs,# 移植IMX6ULL官方的uboot/Linux,linux,arm,arm开发

 1、修改 Makefile,添加编译器

 打开 busybox 的顶层 Makefile,添加 ARCH 和 CROSS_COMPILE的值,如下所示:

rootfs,# 移植IMX6ULL官方的uboot/Linux,linux,arm,arm开发

 164行,添加你的交叉编译目录bin文件下的arm-linux-gnueabihf的绝对路径

 190行,添加“arm”

2、 busybox 中文字符支持

如果默认直接编译 busybox 的话,在使用 SecureCRT 的时候中文字符是显示不正常的,中文字
符会显示为“?”,比如你的中文目录,中文文件都显示为“?”。不知道从哪个版本开始 busybox中的 shell 命令对中文输入即显示做了限制,即使内核支持中文但在 shell 下也依然无法正确显
示。所以需要修改 busybox 源码,取消 busybox 对中文显示的限制
进入根目录打开文件libbb/printable_string.c,找到函数 printable_string

按下图把31-32行,45行进行注释.添加46行

rootfs,# 移植IMX6ULL官方的uboot/Linux,linux,arm,arm开发

 接着打开文件libbb/unicode.c,找到如下内容,按图中注释后添加1031行和1040行

rootfs,# 移植IMX6ULL官方的uboot/Linux,linux,arm,arm开发

 主要是禁止字符大于 0X7F 的时候设置为‘?’

busybox 中文字符支持跟代码修改有关的就改好了

3、配置 busybox

编译 Uboot、 Linux kernel 一样,我们要先对 busybox 进行默认的配置,有以下几种配置选项:
①、 defconfig,缺省配置,也就是默认配置选项。

②、 allyesconfig,全选配置,也就是选中 busybox 的所有功能。

③、 allnoconfig,最小配置

一般使用默认配置即可,因此使用如下命令先使用默认配置来配置一下 busybox:

make defconfig

busybox 也支持图形化配置,通过图形化配置我们可以进一步选择自己想要的功能,输入如下命令打开图形化配置界面:

make menuconfig

rootfs,# 移植IMX6ULL官方的uboot/Linux,linux,arm,arm开发
配置路径如下:Location:-> Settings-> Build static binary (no shared libs)
选项“Build static binary (no shared libs)”用来决定是静态编译 busybox 还是动态编译,静态编译的话就不需要库文件,但是编译出来的库会很大。动态编译的话要求根文件系统中有库文件,但是编译出来的 busybox 会小很多。这里我们不能采用静态编译!因为采用静态编译的话 DNS 会出问题!无法进行域名解析

rootfs,# 移植IMX6ULL官方的uboot/Linux,linux,arm,arm开发

继续配置如下路径配置Location:-> Settings-> vi-style line editing commands
rootfs,# 移植IMX6ULL官方的uboot/Linux,linux,arm,arm开发
 继续配置如下路径配置 Location:-> Linux Module Utilities-> Simplified modutils

 rootfs,# 移植IMX6ULL官方的uboot/Linux,linux,arm,arm开发

 继续配置如下路径配置 Location:-> Linux System Utilities-> mdev (16 kb) 

 确保下面的全部选中,默认都是选中的

rootfs,# 移植IMX6ULL官方的uboot/Linux,linux,arm,arm开发

 最后就是使能 busybox 的 unicode 编码以支持中文,配置路径如下:

Location:-> Settings-> Support Unicode(选中)

-> Check $LC_ALL, $LC_CTYPE and $LANG environment variables(选中)

rootfs,# 移植IMX6ULL官方的uboot/Linux,linux,arm,arm开发

4、 编译 busybox

配置好 busybox 以后就可以编译了,我们可以指定编译结果的存放目录,将编译结果存放到nfs/rootfs 目录中输入如下命令:

make
make install CONFIG_PREFIX=/home/ubantu22/nfs/rootfs

编译完成以后会在 busybox 的所有工具和文件就会被安装到 nfs/rootfs 目录中
rootfs,# 移植IMX6ULL官方的uboot/Linux,linux,arm,arm开发

 可以看出, rootfs 目录下有 bin、 sbin 和 usr 这三个目录,以及 linuxrc 这个文件。前面说过 Linux 内核 init 进程最后会查找用户空间的 init 程序,找到以后就会运行这个用户空间的 init 程序,从而切换到用户态。如果 bootargs 设置 init=/linuxrc,那么 linuxrc 就是可以作为用户空间的 init 程序,所以用户态空间的 init 程序是 busybox 来生成的。busybox 的工作就完成了,但是此时的根文件系统还不能使用,还需要一些其他的文件,下面继续来完善 rootfs。

3 向根文件系统添加 lib 库

1、向 rootfs 的“/lib”目录添加库文件

Linux 中的应用程序一般都是需要动态库的, 当然你也可以编译成静态的,但是静态的可执行文件会很大。如果编译为动态的话就需要动态库,所以我们需要向根文件系统中添加动态库。在 rootfs 中创建一个名为“lib”的文件夹,命令如下:

mkdir lib

 lib 文件夹创建好了,库文件从哪里来呢? lib 库文件从交叉编译器中获取,这里的交叉编译器存放到了“/usr/local/arm/”目录中进入如下路径对应的目录:

/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/lib

 此目录下有很多的*so*(*是通配符)和.a 文件,这些就是库文件,将此目录下所有的*so*和.a文件都拷贝到 rootfs/lib 目录中,拷贝命令如下:

cp *so* *.a /home/ubantu22/nfs/rootfs/lib/ -d

 “-d”表示拷贝符号链接,这里有个比较特殊的库文件: ld-linux-armhf.so.3,此库文件也是个符号链接,相当于 Windows 下的快捷方式。会链接到库 ld-2.19-2014.08-1-git.so 上,输入命令“ls ld-linux-armhf.so.3 -l”查看此文件详细信息
rootfs,# 移植IMX6ULL官方的uboot/Linux,linux,arm,arm开发

ld-linuxarmhf.so.3 不能作为符号链接,否则的话在根文件系统中执行程序无法执行!

需要 ldlinux-armhf.so.3 完成逆袭,由“快捷方式”变为“本尊”,就是重新复制 ld-linuxarmhf.so.3,只是不复制软链接即可,先将 rootfs/lib 中的 ld-linux-armhf.so.3 文件删除掉,命令如下:

rm ld-linux-armhf.so.3

到 /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/lib 目录中,重新拷贝 ld-linux-armhf.so.3,命令如下:

cp ld-linux-armhf.so.3 /home/ubantu22/nfs/rootfs/lib/

重新查看一下

rootfs,# 移植IMX6ULL官方的uboot/Linux,linux,arm,arm开发

此时 ld-linux-armhf.so.3 已经不是软连接了,而是实实在在的一个库文件 

 继续进入如下目录中:

/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib

此目录下也有很多的的*so*和.a 库文件,我们将其也拷贝到 rootfs/lib 目录中,命令如下

cp *so* *.a /home/ubantu22/nfs/rootfs/lib/ -d

 rootfs/lib 目录的库文件就这些了

rootfs,# 移植IMX6ULL官方的uboot/Linux,linux,arm,arm开发

 2、向 rootfs 的“usr/lib”目录添加库文件

在 rootfs 的 usr 目录下创建一个 lib 的目录,将下面目录中的库文件拷贝到 rootfs/usr/lib目录下:

/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/lib

 将此目录下的 so 和.a 库文件都拷贝到 rootfs/usr/lib 目录中,命令如下:

cp *so* *.a /home/ubantu22/nfs/rootfs/usr/lib/ -d

 如图

rootfs,# 移植IMX6ULL官方的uboot/Linux,linux,arm,arm开发

 根文件系统的库文件就全部添加好了,可以使用“du”命令来查看一下 rootfs/lib 和
rootfs/usr/lib 这两个目录的大小,命令如下:

du ./lib ./usr/lib/ -sh

rootfs,# 移植IMX6ULL官方的uboot/Linux,linux,arm,arm开发

最后,在根文件系统中创建其他文件夹,如 dev、 proc、 mnt、 sys、 tmp 和 root

rootfs,# 移植IMX6ULL官方的uboot/Linux,linux,arm,arm开发

 三、根文件系统初步测试

测试一下前面创建好的根文件系统 rootfs,测试方法就是使用 NFS 挂载,uboot 里面的 bootargs 环境变量会设置“root”的值,所以我们将 root 的值改为 NFS 挂载即可,格式如下:

root=/dev/nfs nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>] ip=<client-ip>:<server-ip>:<gwip>:<netmask>:<hostname>:<device>:<autoconf>:<dns0-ip>:<dns1-ip>

 <server-ip>:服务器 IP 地址,也就是存放根文件系统主机的 IP 地址,,就是 Ubuntu 的 IP地址
<root-dir>: 根文件系统的存放路径
<nfs-options>: NFS 的其他可选选项,一般不设置
<client-ip>: 客户端 IP 地址,也就是我们开发板的 IP 地址
<server-ip>: 服务器 IP 地址
<gw-ip>: 网关地址
<netmask>:子网掩码
<hostname>:客户机的名字,一般不设置,此值可以空着
<device>: 设备名,也就是网卡名,一般是 eth0, eth1…
<autoconf>: 自动配置,一般不使用,所以设置为 off
<dns0-ip>: DNS0 服务器 IP 地址,不使用
<dns1-ip>: DNS1 服务器 IP 地址,不使用

根据上面的格式和自身实际 bootargs 环境变量的 root 值如下:

root=/dev/nfs nfsroot=192.168.1.222:/home/ubantu22/nfs/rootfs,proto=tcp rw
ip=192.168.1.221:192.168.1.222:192.168.1.1:255.255.255.0::eth0:off

“proto=tcp”表示使用 TCP 协议,“rw”表示 nfs 挂载的根文件系统为可读可写。 启动开发
板,进入 uboot 命令行模式,然后重新设置 bootargs 环境变量

setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.1.222:
/home/ubantu22/nfs/rootfs,proto=tcp rw ip=192.168.1.221:192.168.1.222:192.168.1.1:
255.255.255.0::eth0:off' 
saveenv

rootfs,# 移植IMX6ULL官方的uboot/Linux,linux,arm,arm开发 设置好保存以后使用“boot”命令启动 Linux 内核,可以输入“ls”命令测试一下,结果如下图
 rootfs,# 移植IMX6ULL官方的uboot/Linux,linux,arm,arm开发

 四、完善根文件系统

进入根文件系统的时候会有下面这一行错误提示:

can't run '/etc/init.d/rcS': No such file or directory

1 创建/etc/init.d/rcS 文件

rcS 是个 shell 脚本, Linux 内核启动以后需要启动一些服务,而 rcS 就是规定启动哪些文件
的脚本文件。在 rootfs 中创建/etc/init.d/rcS 文件,先创建目录和文件

mkdir etc

cd etc

mkdir init.d

cd init.d

vi rcS

然后在 rcS 中输入如下所示内容:

#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:$PATH
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib
export PATH LD_LIBRARY_PATH
mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s

使用如下命令给予/ec/init.d/rcS 可执行权限:chmod 777 rcS

设置好以后就使用reboot重新启动 Linux 内核,发现新的错误提示

mdev: /sys/dev: No such file or directory

2 创建/etc/fstab 文件

 在 rootfs 中创建/etc/fstab 文件, fstab 在 Linux 开机以后自动配置哪些需要自动挂载的分区,
格式如下:

<file system> <mount point> <type> <options> <dump> <pass>

<file system>:要挂载的特殊的设备,也可以是块设备,比如/dev/sda 等
<mount point>:挂载
<type>:文件系统类型,比如 ext2、 ext3、 proc、 romfs、 tmpfs 等
<options>:挂载选项,在 Ubuntu 中输入“man mount”命令可以查看具体的选项。一般使用 defaults,也就是默认选项, defaults 包含了 rw、 suid、 dev、 exec、 auto、 nouser 、async
<dump>:为 1 的话表示允许备份,为 0 不备份,一般不备份,因此设置为 0
<pass>:磁盘检查设置,为 0 表示不检查。根目录‘/’设置为 1,其他的都不能设置为 1,其他的分区从 2 开始。一般不在 fstab 中挂载根目录,因此这里一般设置为 0
在 fstab 文件中输入如下内容:

#<file system> <mount point> <type> <options> <dump> <pass>
        proc     /proc          proc defaults    0       0
        tmpfs    /tmp           tmpfs defaults   0       0
        sysfs    /sys           sysfs defaults   0       0

rootfs,# 移植IMX6ULL官方的uboot/Linux,linux,arm,arm开发

 完成以后重新启动 Linux

rootfs,# 移植IMX6ULL官方的uboot/Linux,linux,arm,arm开发

可以看出,启动成功,而且没有任何错误提示

3 创建/etc/inittab 文件

 inittab 由若干条指令组成。每条指令的结构都是一样的,由以“:”分隔的 4 个段组成,格式如下

 <id>:<runlevels>:<action>:<process>

<id>:每个指令的标识符,不能重复。但是对于 busybox 的 init 来说, <id>有着特殊意义。对于 busybox 而言<id>用来指定启动进程的控制 tty,一般将串口或者 LCD 屏幕设置为控制 tty。<process>: 具体的动作,比如程序、脚本或命令等
<runlevels>: 对 busybox 来说此项完全没用,所以空着。
<action>:动作,用于指定<process>可能用到的动作,如下

rootfs,# 移植IMX6ULL官方的uboot/Linux,linux,arm,arm开发

 参考 busybox 的 examples/inittab 文件,创建一个/etc/inittab,在里面输入如下内容:

#etc/inittab

::sysinit:/etc/init.d/rcS
console::askfirst:-/bin/sh
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a

rootfs,# 移植IMX6ULL官方的uboot/Linux,linux,arm,arm开发

 第 2 行,系统启动以后运行/etc/init.d/rcS 这个脚本文件。
第 3 行,将 console 作为控制台终端,也就是 ttymxc0。
第 4 行,重启的话运行/sbin/init。
第 5 行,按下 ctrl+alt+del 组合键的话就运行/sbin/reboot,ctrl+alt+del 组合键用于重启系统。
第 6 行,关机的时候执行/bin/umount,也就是卸载各个文件系统。
第 7 行,关机的时候执行/sbin/swapoff,也就是关闭交换分区。

至此!根文件系统要创建的文件就已经完成了。接下来就要对根文件系统进行其他的测试,比如我们自己编写的软件运行是否正常、是否支持软件开机自启动、中文支持是否正常以及能不能链接等

5 根文件系统其他功能测试

1 软件运行测试、中文测试和后台测试

在根文件系统根目录下创建一个名为“drivers”的文件夹,

在 ubuntu 下使用 vim 编辑器新建一个 你好.c 文件,在 你好.c 里面输入如下内容:

#include <stdio.h>
int main(void)
{
while(1) {
printf("hello world!\r\n");
sleep(2);
}
return 0;
}

输入下面命令进行编译

arm-linux-gnueabihf-gcc hello.c -o hello 

在开发板上运行测试一下

rootfs,# 移植IMX6ULL官方的uboot/Linux,linux,arm,arm开发

 每两秒就会打印一次,而且已经看到是支持中文的了

运行软件的时候加上“&”即可,比如“./hello &”就是让 hello 在后台运行。在后台运行的软件可以使用“kill -9 pid(进程 ID)”命令来关闭掉,首先使用“ps”命令查看要关闭的软件 PID 是多少, ps 命令用于查看所有当前正在运行的进程,并且会给出进程的 PID,这里pid是78

rootfs,# 移植IMX6ULL官方的uboot/Linux,linux,arm,arm开发

rootfs,# 移植IMX6ULL官方的uboot/Linux,linux,arm,arm开发

 这会一边打印一边输入的,在输入的时候,按照命令的输入即可,不需要管终端打印

2 开机自启动测试

 复制一份“你好”名为hello

rootfs,# 移植IMX6ULL官方的uboot/Linux,linux,arm,arm开发

进入根文件系统的时候会运行/etc/init.d/rcS 这个 shell 脚本,因此我们可以在这个脚本里面添加自启动相关内容。添加完成以后的/etc/init.d/rcS 文件内容如下:

#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:$PATH
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib
runlevel=S
umask 022
export PATH LD_LIBRARY_PATH

mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts

echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s

#开机自启动
cd /drivers
./hello &
cd /

自启动代码添加完成以后就可以重启开发板,下图
rootfs,# 移植IMX6ULL官方的uboot/Linux,linux,arm,arm开发

 自启动成功,把后面几行代码删除即可关闭自启动

3 外网连接测试

在 rootfs 中新建文件/etc/resolv.conf,然后在里面输入如下内容:

nameserver 114.114.114.114
nameserver 192.168.1.1

开发板连到路由器上面,保证有网络,直接ping www.baidu.com通即可

打包备份

进入根文件系统的根目录(这里为rootfs)输入下面命令

tar -vcjf rootfs.tar.bz2 *

完成之后用ls查看一下,就根目录下就有一个压缩包

rootfs,# 移植IMX6ULL官方的uboot/Linux,linux,arm,arm开发

 

根文件系统rootfs构建到此!文章来源地址https://www.toymoban.com/news/detail-741227.html

到了这里,关于根文件系统rootfs构建的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【IMX6ULL驱动开发学习】02.IMX6ULL烧写Linux系统

    由于我买的是正点原子的IMX6ULL阿尔法开发板,但是我是看韦东山老师视频学习的驱动 所以这里我烧录的方法是按照韦东山老师的课程来的 这里给出烧写Linux系统用到的工具 链接:https://pan.baidu.com/s/1bD-xxn3K8xQAVkJSaJmTzQ 提取码:af6w 下载解压后,可以看到烧写工具 烧写Linux系统

    2024年02月13日
    浏览(54)
  • 嵌入式linux之iMX6ULL驱动开发 | 移远4G模块EC800驱动移植指南

    回顾下移远4G模块移植过程, 还是蛮简单的。一通百通,无论是其他4G模块都是一样的。这里记录下过程,分享给有需要的人。环境使用正点原子的imax6ul开发板,板子默认支持中兴和移远EC20的驱动,这里要移植使用的是移远4G模块EC800。 imax6ul开发板 虚拟机(Ubuntu18.04) 交叉编译

    2024年02月12日
    浏览(56)
  • 【IMX6ULL驱动开发学习】08.IMX6ULL通过GPIO子系统函数点亮LED

    通过GPIO子系统函数点亮LED 1、GPIO子系统函数 1.1 确定 led 的GPIO标号,查看内核中的gpiochip 查看 gpiochip ,以正点原子的IMX6ULL阿尔法开发板为例 查看原理图,发现led接的引脚是 GPIO1_IO3,对应 /sys/kernel/debug/gpio 中的 gpiochip0 组,gpiochip0 组从0开始算起, 所以 GPIO1_IO3 对应的标号就

    2024年02月10日
    浏览(75)
  • 【IMX6ULL驱动开发学习】10.设置uboot,通过tftp服务器加载内核与设备树,通过nfs挂载根文件系统

    首先根据这篇博客,保证自己的开发板与Ubuntu主机处于同一个网段,并且可以ping通 【IMX6ULL驱动开发学习】03.设置IMX6ULL开发板与虚拟机在同一网段 1. 在uboot中设置网络 首先启动自己的板子进入Linux系统,使用 ifconfig 命令或者 ifconfig -a 命令查看自己网卡的地址 我的网卡地址是

    2024年02月05日
    浏览(48)
  • Linux系统下imx6ull QT编程—— C++基础(一)

    学习 C++的面向对象编程,对学习 Qt 有很大的帮助 效率上,肯定是 C 语言的 scanf 和 printf 的效率高,但是没有 C++中的 cin 和 cout 使用方便。 x 可以是任意数据类型,甚至可以写成一个表达式,这比 C 语言需要指定数据类型方便多了,endl 指的是换行符,与 C 语言的“n”效果一

    2024年02月07日
    浏览(51)
  • imx6ull uboot使用tftp加载内核zImage及设备树dtb文件

    在基于嵌入式linux开发时,经常要烧写内核代码及设备数文件,而mfgtools工具的烧写速度台慢,浪费大量时间,在观看左盟主的imx6ul视频驱动开发视频时发现他是用tftp自动加载内核或设备数,现将内容整理如下。 1、在Ubuntu系统中搭建tftp服务 1)安装tftp 2)建立tftp目录,并修

    2024年02月07日
    浏览(36)
  • iMX6ULL驱动开发 | 让imx6ull开发板支持usb接口FC游戏手柄

    手边有一闲置的linux开发板iMX6ULL一直在吃灰,不用来搞点事情,总觉得对不住它。业余打发时间就玩起来吧,总比刷某音强。从某多多上买来一个usb接口的游戏手柄,让开发板支持以下它,后续就可以接着在上面玩童年经典游戏啦。  我使用的是正点原子的I.MX6U-ALPHA 开发板,

    2024年02月14日
    浏览(51)
  • 【IMX6ULL驱动开发学习】22.IMX6ULL开发板读取ADC(以MQ-135为例)

    IMX6ULL一共有两个ADC,每个ADC都有八个通道,但他们共用一个ADC控制器 在imx6ull.dtsi文件中已经帮我们定义好了adc1的节点部分信息 注意 num-channels = 2; ,这个表示指定使用ADC1的两个通道,即通道1和通道2 如果你要使用多个ADC通道,修改这个值即可 配置ADC引脚的 pinctrl ,在自己的

    2024年02月12日
    浏览(58)
  • 【IMX6ULL驱动开发学习】05.IMX6ULL驱动开发_编写第一个hello驱动【熬夜肝】

    经过以下四个步骤,终于可以开始驱动开发了 01.安装交叉编译环境【附下载地址】 02.IMX6ULL烧写Linux系统 03.设置IMX6ULL开发板与虚拟机在同一网段 04.IMX6ULL开发板与虚拟机互传文件 一、获取内核、编译内核 二、创建vscode工作区,添加内核目录和个人目录 三、了解驱动程序编写

    2024年02月06日
    浏览(49)
  • Linux系统下imx6ull QT编程—— C++数据封装与数据抽象(八)

    封装是面向对象编程中的把数据和操作数据的函数绑定在一起的一个概念,这样能避免受到外界的干扰和误用,从而确保了安全。数据封装引申出了另一个重要的 OOP 概念,即数据隐藏。数据封装是一种把数据和操作数据的函数捆绑在一起的机制,数据抽象是一种仅向用户暴

    2024年02月07日
    浏览(74)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包