Hi3519-pinctrl驱动开发①开发环境搭建

来源:互联网 发布:武汉淘宝图片拍摄 编辑:程序博客网 时间:2024/06/06 05:45

Hi3519运行的系统基于Linux 3.18.y内核,访问 www.kernel.org 下载Linux 3.18.20内核源码linux-3.2.20.tar.bz2,在虚拟机里面解压源码。编译内核使用网上的交叉编译器可能与使用的内核不配套,造成开发过程中出现一些不可预料的问题,因此海思提供了两款编译工具链 arm-hisiv500-linux 和 arm-hisiv600-linux,其中 arm-hisiv500-linux 为基于 uclibc 的工具链,arm-hisiv600-linux 为基于 glibc 的工具链。我使用的是arm-hisiv600-linux工具链,解压arm-hisiv600-linux.tar.gz,可以不用安装,防止与其他版本的交叉编译器冲突,使用的时候指定编译器的全路径就行了。

下面就进行内核配置,需要拷贝配置文件到内核源码根目录:

cp arch/arm/configs/hi3519v101_big_little_nand_defconfig  .config

这个配置文件是海思提供的,下面就进行menuconfig配置内核:

make ARCH=arm CROSS_COMPILE=/home/tq/arm-hisiv600-linux/bin/arm-hisiv600-linux-gnueabi- menuconfig

选择需要的模块后保存退出。下面就能进行内核编译了:

make ARCH=arm CROSS_COMPILE=/home/tq/arm-hisiv600-linux/bin/arm-hisiv600-linux-gnueabi- uImage

编译完成之后就得到了压缩内核镜像文件uImage。

到这里基本的驱动开发环境完成了,搭建过程比较简单,下面就要为pinctrl开发做准备,先要使能内核的pinctrl驱动。打开内核源码下driver/pinctrl/Kconfig文件,文件中没有Hi3519的pinctrl驱动配置选项,自行添加:

config PINCTRL_HI3519
bool "HI3519 pin controller driver"
depends on ARCH_HI3519V101
help
  By tangquan

保存之后进行menuconfig发现在Device Drivers菜单中没有Pin controllers选项,原因在Kconfig文件的前几行中:

config PINCTRL
bool

if PINCTRL

menu "Pin controllers"
depends on PINCTRL

......

很清楚说明了如果PINCTRL没有定义的话则pinctrl则没有使能,所以就需要定义PINCTRL,打开arch/arm/mach-hisi/Kconfig文件,找到ARCH_HI3519V101选项,添加select选项:

config ARCH_HI3519V101
bool "Hisilicon Hi3519V101 Cortex-a7.Cortex-a17 family" if ARCH_MULTI_V7
select HAVE_ARM_ARCH_TIMER
select ARM_CCI
select ARCH_HAS_RESET_CONTROLLER
select RESET_CONTROLLER
select PM_OPP
select PMC if SMP
select PINCTRL

help
 Support for Hisilicon Hi3519V101 Soc family

添加了之后就相当于定义了CONFIG_PINCTRL=y,CONFIG_PINCTRL就算是PINCTRL的全称,这时候进行menuconfig时就会有Pin controllers选项,选择HI3519 pin controller driver,这样就定义了CONFIG_PINCTRL_HI3519=y。

配置选项做好之后在pinctrl文件夹中添加两个文件:pinctrl-hi3519.c、pinctrl-hi3519.h作为驱动源文件和头文件。然后在Makefile中添加编译项:

obj-$(CONFIG_PINCTRL_HI3519) += pinctrl-hi3519.o

由于CONFIG_PINCTRL_HI3519已经定义了且为y,那么这句话解析过来就是:

obj-y += pinctrl-hi3519.o

obj-y表示的是编译到内核,obj-m是编译成模块,那么这句话表示将pinctrl-hi3519.o编译进内核。现在重新进行内核编译之后就会发现pinctrl文件夹中多了一个pinctrl-hi3519.o文件,这就表示pinctrl-hi3519.c被编译了,接下来就能正式进行驱动的编写了。