IMX6ULL野火开发板学习笔记

一、uboot编译

1.获取

git clone https://gitee.com/Embedfire/ebf_linux_uboot.git
切换分支
git checkout ebf_v2020_10_imx
3.编译
//加载板级配置文件
make ARCH = arm CROSS_COMPILE = arm-none-linux-gnueabihf- mx6ull_fire_mmc_defconfig
//编译
make ARCH = arm CROSS_COMPILE = arm-none-linux-gnueabihf-
二、uboot烧录
编译生成的u-boot-dtb.imx就是需要的,改名为u-boot-mmc.imx
放入\mfgtool\mfgtools-release\Profiles\Linux\OS Firmware\release下
修改cfg.ini文件中:
my_uboot=u-boot-mmc.imx
烧录即可
三、uboot中GPIO操作
修改makefile 文件
obj-y += ebf_gpio.o
ebf_gpio.c中添加shell命令
IMX6ULL野火开发板学习笔记_第1张图片
IMX6ULL野火开发板学习笔记_第2张图片

四、linux kernel编译

make mrproper   //清除
make ARCH = arm npi_v7_defconfig   //配置
make ARCH = arm CROSS_COMPILE = arm-none-linux-gnueabihf-   //编译内核
make imx6ull-mmc-npi.dtb ARCH = arm CROSS_COMPILE = arm-none-linux-gnueabihf-    //设备树
使用编译好的内核zImage和设备树imx6ull-14x14-evk-emmc.dtb
设置启动bootcmd:
setenv bootcmd "tftp 0x80008000 zImage; tftp 0x83000000  imx6ull-14x14-evk-emmc.dtb; bootz 0x80008000 - 0x83000000"
saveenv
注意bootz 0x80008000 - 0x83000000两个地址间的“-”前后加空格
IMX6ULL野火开发板学习笔记_第3张图片

内核启动,但是没有文件系统。

uboot恢复默认环境变量:env default -a

                                        saveenv

五、虚拟机里创建tftp环境

1.安装 

sudo apt-get install tftpd-hpa tftp-hpa

sudo vim /etc/default/tftpd-hpa

修改路径

IMX6ULL野火开发板学习笔记_第4张图片

 2.拷贝内核zImage与设备树文件到tftp目录

注意需要给文件权限,chmod 777 ,不然下载时候会提示Permission denied。

六、使用nfs挂载文件系统

1.搭建nfs环境

sudo apt-get install nfs-kernel-server
配置nfs路径
IMX6ULL野火开发板学习笔记_第5张图片

 重启

sudo /etc/init.d/nfs-kernel-server restart
2.挂载文件系统
解压提供的文件系统压缩包到/home/cxq/linux/nfs/rootfs/
3.配置bootargs
setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.19.99:/home/cxq/linux/nfs/rootfs,proto=tcp rw ip=192.168.19.156:192.168.19.99:192.168.19.1:255.255.255.0::eth0:off'
重新启动开发板,挂载成功
IMX6ULL野火开发板学习笔记_第6张图片

IMX6ULL野火开发板学习笔记_第7张图片

/**************************************************************************************************************

                                                        linux 驱动开发

**************************************************************************************************************/

一、linux内核模块

        内核按照体系结构分为两类:微内核( Micro Kernel 宏内核( Monolithic Kernel 。在微内核 架构中,内核只提供操作系统核心功能,如实现进程管理、存储器管理、进程间通信、I/O 设备管理等,而其它的应用层 IPC 、文件系统功能、设备驱动模块则不被包含到内核功能中,属于微 内核之外的模块,所以针对这些模块的修改不会影响到微内核的核心功能。微内核具有动态扩展 性强的优点。Windows 操作系统、华为的鸿蒙操作系统就属于这类微内核架构。 而宏内核架构是将上述包括微内核以及微内核之外的应用层 IPC 、文件系统功能、设备驱动模块 都编译成一个整体。其优点是执行效率非常高,但缺点也是十分明显的,一旦我们想要修改、增 加内核某个功能时(如增加设备驱动程序)都需要重新编译一遍内核。Linux 操作系统正是采用 了宏内核结构。为了解决这一缺点,linux 中引入了内核模块这一机制。
IMX6ULL野火开发板学习笔记_第8张图片

        Linux 是一个跨平台的操作系统,支持众多的设备,在 Linux 内核源码中有超过 50% 的代码都与 设备驱动相关。Linux 为宏内核架构,如果开启所有的功能,内核就会变得十分臃肿。内核模块 就是实现了某个功能的一段内核代码,在内核运行过程,可以加载这部分代码到内核中,从而动 态地增加了内核的功能。基于这种特性,我们进行设备驱动开发时,以内核模块的形式编写设备 驱动,只需要编译相关的驱动代码即可,无需对整个内核进行编译。
        内核模块的引入不仅提高了系统的灵活性,对于开发人员来说更是提供了极大的方便。在设备驱 动的开发过程中,我们可以随意将正在测试的驱动程序添加到内核中或者从内核中移除,每次修 改内核模块的代码不需要重新启动内核。在开发板上,我们也不需要将内核模块程序,或者说设 备驱动程序的 ELF 文件存放在开发板中,免去占用不必要的存储空间。当需要加载内核模块的 时候,可以通过挂载 NFS 服务器,将存放在其他设备中的内核模块,加载到开发板上。在某些
特定的场合,我们可以按照需要加载 / 卸载系统的内核模块,从而更好的为当前环境提供服务。
二、内核操作指令
加载:insmod
卸载:rmmod
显示所有模块: ls /sys/module
设备树操作:ls /proc/device-tree
三、LED驱动实验
1.使用官方提供的代码
注意修改Makefile文件中的kernel路径及使用的编译器名称之后
make生成 rgb_led.ko 与  test_app
加载模块 insmod ./ rgb_led.ko
执行应用程序 ./test_app

你可能感兴趣的:(linux,嵌入式硬件)