(6)Linux驱动开发入门的打开方式
一、对于普通引脚的配置流程
参考恩智浦官网的数据手册:IMX6ULL 参考手册.pdf
(1)时钟使能
“Chapter 18: Clock Controller Module(CCM)”(P698)
(2)IO复用
“Chapter 32: IOMUX Controller(IOMUXC)”:About IO
分为GPR(Secure Non-VolatileStorage,直译过来就是安全的非易性存储)和SNVS(Secure Non-VolatileStorage,直译过来就是安全的非易性存储)
例如:IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO00
可复用 复用与 SION和MUX_MODE有关
“Chapter 4 External Signals and Pin Multiplexing”
只查看每个IO能复用什么外设;input-output multiplexer
(3)IO配置
同在32章,但是MUX 改为PAD
IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO00(SW_PAD_CTL_PAD_GPIO1_IO00 SW PAD Control Register)
(4)GPIO通用配置(P1358)
DR:data register
GDIR:direction register
ICR:interrupt configuration register
IMR:interrupt mask register
ISR:interrupt status register
EDGE_SEL:edge select register
二、编写启动文件
此部分对于了解STM32的读者可能较为熟悉,在芯片启动的过程中,需要从汇编过渡到C语言的环境,在我们使用STM32的时候,ST公司帮我们编写了启动文件,有兴趣的小伙伴可以看一下,但是我看不太懂。
对于我们目前阶段,启动文件很简单,目的就是设置好芯片的起始ROM,RAM以及应用的栈大小。这些在STM32的开发过程中都未曾涉及。在一些DSP的初始化过程中涉及到过。

像这样,都是汇编,但是都是基础汇编指令。查查可以明白。这里需要注意的是,栈指针为0x80200000,栈大小 0X80200000-0X80000000=0X200000=2MB,对于刚开始2MB已经足够了。
三、程序烧录
此部分注重理解,与之前的STM32的MDK不同之处,更加细化了编译链接的过程,而不是MDK一键化的处理
分为:编译->链接->下载
arm-linux-gnueabihf-gcc -g -c led.s -o led.o
链接:将.o文件连接起来 形成可执行文件;-Ttext 0X87800000指定链接地址
arm-linux-gnueabihf-ld -Ttext 0X87800000 led.o -o led.elf
转换为bin格式;-O binary选择转换格式
arm-linux-gnueabihf-objcopy -O binary -S -g led.elf led.bin
三、烧写到SD卡上
将 imxdownload 拷贝到工程根目录下,也就是和 led.bin 处于同一个文件夹下
给予 imxdownload 可执行权限
烧写:./imxdownload led.bin /dev/sdd1
完成!
具体打开方式可以选择 一 汇编 二 C语言 三 类似STM32 的库函数模式,下图为C语言开发图 地址等数据均可以在数据手册中找到

试着自己写一写,可以感觉更加了解此芯片的底层架构,自此LED灯被点亮了,也意味着此芯片被征服了。

