I.Mx6Ull
文章平均质量分 80
猩猩の點燈
这个作者很懒,什么都没留下…
展开
-
DeviceDriver(十四):多点触摸(MT协议,Input子系统)
电阻式多点触摸驱动参考:https://blog.csdn.net/qq_34968572/article/details/90695776一:电容触摸屏知识点1、电容触摸屏是I2C接口,需要触摸IC,因此框架为I2C设备驱动框架。2、通过中断引脚(INT)向Linux内核上报触摸信息,因此需要用到Linux中断驱动框架,坐标上报在中断服务函数中完成。3、触摸屏的坐标信息,屏幕...原创 2020-03-24 10:53:33 · 2864 阅读 · 1 评论 -
DeviceDriver(十三):SPI驱动
一:SPI驱动框架简介SPI驱动框架同I2C类似,分为主机控制器驱动和设备驱动。1、SPI主机驱动SPI主机驱动就是SOC的SPI控制器驱动,Linux内核使用spi_master表示SPI主机驱动:struct spi_master { struct device dev; struct list_head list; s16 bus_num; u16 num_...原创 2020-03-20 10:04:48 · 1532 阅读 · 0 评论 -
DeviceDriver(十二):I2C驱动
一:Linux I2C驱动框架Linux内核将I2C驱动分为两部分:(1)I2C总线驱动,I2C总线驱动就是SOC的I2C控制器驱动,也叫做I2C适配器驱动(2)I2C设备驱动,I2C设备驱动就是针对具体的I2C设备而编写的驱动。作为SOC开发者来讲无需关心i2c总线驱动,只需关注i2c设备驱动即可。1、I2C总线驱动 I2C设备与platform设备不同的是,...原创 2020-03-13 16:40:03 · 1908 阅读 · 0 评论 -
DeviceDriver(十一):LCD驱动(设备树)
LCD非设备树驱动框架参考:https://blog.csdn.net/qq_34968572/article/details/89922596一:设备树文件分析1、公用文件imx6ull.dtsilcdif: lcdif@021c8000 { compatible = "fsl,imx6ul-lcdif", "fsl,imx28-lcdif"; reg = &l...原创 2020-03-11 16:29:06 · 956 阅读 · 0 评论 -
DeviceDriver(十):MISC驱动
一:MISC设备驱动简介 MISC的意思是混合,杂项的,因此MISC驱动也叫做杂项驱动,就是我们开发板上的某些外设无法进行分类的时候就可以使用MISC驱动。MISC驱动其实就是最简单的字符设备驱动,通常嵌套在platform总线驱动中,实现复杂的驱动。所有的MISC设备驱动的主设备号都是10,不同的设备使用不同的从设备号。MISC设备会自动创建cdev,不需要像我们之前那样手动创建...原创 2020-02-24 16:58:00 · 444 阅读 · 0 评论 -
DeviceDriver(九):Platform总线(设备树)
Platform总线设备驱动未采用设备树的方式之参考:https://blog.csdn.net/qq_34968572/article/details/89915200一:设备树下的platform驱动简介 platform驱动框架分为总线,设备和驱动,其中总线不需要我们这些驱动程序员去管理,这个是Linux内核提供的,我们在编写驱动的时候只需要关注设备和驱动的具体实现...原创 2020-02-20 17:32:39 · 656 阅读 · 0 评论 -
DeviceDriver(八):异步通知
一:异步通知 异步通知的核心是信号,它不同于阻塞与非阻塞方式,阻塞方式访问会使应用程序处于休眠态,等待驱动设备可以使用,非阻塞方式则会通过应用程序的poll函数来不断的轮询,查看驱动设备文件是否可以使用。这两种方式都需要应用程序主动去查询设备的使用情况。而异步通知则是驱动主动去通知应用程序自己可以被访问,应用程序获取到信号后就可以对驱动设备进行读写操作,类似于硬件上使用的“中断”...原创 2020-01-11 16:50:38 · 224 阅读 · 0 评论 -
DeviceDriver(七):阻塞与非阻塞
一:阻塞与非阻塞1、当应用程序对设备驱动进行操作的时候,如果不能立即获取到设备资源。对于阻塞式IO来讲,会将对应线程挂起,直到获取到设备资源为止。对于非阻塞IO,线程则不会挂起,而是一直轮询等待直到设备资源可以使用,要么就直接放弃。2、应用程序实现方式阻塞式:fd = open("/dev/xxx_dev", O_RDWR); /* 阻塞方式打开 */非阻塞式...原创 2020-01-08 19:33:57 · 253 阅读 · 0 评论 -
DeviceDriver(六):中断
一:Linux中断简介 Linux内核提供了完善的中断框架,无需配置寄存器,使能IRQ等,只需要申请中断,然后注册中断处理函数即可,每个中断都有一个中断号,通过中断号即可区分不同的中断,在Linux内核中使用一个int变量表示中断号。二:中断API1、申请中断request_irqint request_irq(unsigned int irq, ...原创 2020-01-07 14:25:46 · 355 阅读 · 0 评论 -
DeviceDriver(五):内核定时器
一:内核时间管理1、硬件定时器提供时钟源,时钟源的频率可以设置,设置好以后就可以周期性的产生定时中断,系统就可以使用定时中断来计时。中断周期性的产生的频率就是系统频率也叫做节拍率,比如1000Hz,500Hz,100Hz就是系统节拍率。系统节拍率可以设置,在配置Linux内核时可以进行设置,默认值为100Hz也就是10ms,在Linux内核中用“HZ”表示:# undef HZ# de...原创 2019-12-26 17:43:41 · 150 阅读 · 0 评论 -
DeviceDriver(四):并发与竞争
一:原子操作原子操作指不能再进一步分割的指令,一般原子操作用于变量或者位操作。<1>原子整形操作1、原子操作定义typedef struct { int counter;} atomic_t;/* 64位SOC */typedef struct { long long counter;} atomic64_t;2、内核函数(1)初始化原子变量:...原创 2019-12-19 17:32:21 · 147 阅读 · 0 评论 -
DeviceDriver(三):GPIO子系统
一:GPIO子系统 当PIN被pinctrl子系统复用为gpio时,就需要用到gpio子系统,gpio子系统的主要目的是为了方便使用gpio,在设备树中添加gpio相关信息,然后就可以在驱动程序中使用gpio子系统提供的API函数来操作gpio,linux内核屏蔽了gpio的设置过程,这样极大的方便了使用gpio二:GPIO设备树信息&iomuxc...原创 2019-12-11 16:46:28 · 1488 阅读 · 0 评论 -
DeviceDriver(二):Pinctrl子系统
一:Pinctrl子系统大多数SOC的pin配置都很繁琐,复用、上拉、下拉、速度、驱动能力等等,对此Linux内核针对PIN的配置引入了pinctrl子系统。pinctrl子系统主要功能:1、获取设备树中pin信息。2、根据获取到的pin信息来设置pin的复用功能。3、根据获取到的pin信息来设置pin的电气特性,比如上/下拉,速度,驱动能力等。二:PIN配置信息在pi...原创 2019-11-28 15:48:39 · 547 阅读 · 0 评论 -
Linux-设备树
一:设备树概念 Linux内核发展早期arm架构关于SOC和开发板及其外设的板级文件极其庞大,随着越来越多的SOC和开发板的诞生,其板级文件以指数级增长,同时越来越多的“垃圾文件”被编译进了Linux内核中。对此linus有话要说:“This whole ARM thing is a fucking pain in the ass”,arm的东西糟糕透顶了,于是arm就引入...原创 2019-11-25 10:23:47 · 476 阅读 · 0 评论 -
DeviceDriver(一):新字符设备框架
一:分配和释放设备号1,动态分配:dev:高12位为主设备号,低20位为次设备号;baseminor:次设备号起始地址;count:请求分配设备号数量;name:设备名int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count, const char *name)2,静态分配:form:要分配的...原创 2019-11-21 11:04:29 · 278 阅读 · 0 评论 -
BuildRoot-根文件系统搭建
一:配置buildrootmake menuconfig1、配置Target options2、配置Toolchain,选用自定义交叉编译器,设置编译器前缀,路径版本等等。3、配置System configuration,设置开发板名字,欢迎语,用户名,密码。4、配置Filesystem images,打包根文件系统格式,imx6ull不需要,mfgtool工具已...原创 2019-11-19 11:02:57 · 229 阅读 · 0 评论 -
uboot启动环境变量配置
setenv panel TFT7016_LCD(或者直接在uboot中的h文件直接修改panel值)setenv ipaddr 192.168.1.101setenv ethaddr 00:01:02:03:04:05setenv gatewayip 192.168.1.1setenv netmask 255.255.255.0setenv serverip 192.1...原创 2019-11-18 17:40:46 · 777 阅读 · 0 评论 -
BusyBox-根文件系统搭建
一:修改Makefile164 CROSS_COMPILE ?= /home/jun/work/tool/arm-linux-gcc/gcc-linaro-4.9.4-2017.01-x86_64_arm- linux-gnueabihf/bin/arm-linux-gnueabihf-192 ARCH ?= arm二:修改busybox支持中文字符修改busybox...原创 2019-11-15 19:26:59 · 291 阅读 · 0 评论 -
Linux-4.1.15移植(二)
一:网络驱动移植1、网卡复位引脚设置ENET1,ENET2复位引脚为SNVS_TAMPER7和SNVS_TAMPER8。首先删除设备树中这两个引脚GPIO5_IO07,GPIO5_IO08的设置(原理图与NXP提供的样板引脚功能不同):(1)spi4 {-- pinctrl-assert-gpios = <&gpio5 8 GPIO_ACTIVE_LOW...原创 2019-11-15 11:18:01 · 781 阅读 · 0 评论 -
Linux-4.1.15移植(一)
一:添加开发板配置文件/arch/arm/configs目录下创建“imx_my_emmc_defconfig”配置文件二:添加开发板设备树文件/arch/arm/boot/dts目录下创建“imx6ull-my-emmc.dts”设备树文件同目录下Makefile中“CONFIG_SOC_IMX6ULL”一栏添加设备树文件:“imx6ull-my-emmc.dtb”...原创 2019-11-14 15:15:44 · 778 阅读 · 0 评论 -
Linux-4.1.15启动分析
一:链接脚本分析启动入口arch/arm/kernel/vmlinux.lds * arch/arm/include/asm/page.h * * Copyright (C) 1995-2003 Russell King * * This program is free software; you can redistribute it and/or modify * it...原创 2019-11-13 17:23:32 · 1264 阅读 · 0 评论 -
U-Boot-2016.03移植(二)
uboot驱动移植一般需要修改的是板级底层文件即cxxx.c:/board/freescale/mx6ull_my_emmc/mx6ull_my_emmc.c和xxx.h:/include/configs/mx6ull_my_emmc.h一:LCD驱动修改由于原子的lcd与nxp的一致,所以修改相对简单,io无须修改,只需修改lcd的相关参数即可。1、lcd屏显示框图:2、行显...原创 2019-11-12 15:42:02 · 349 阅读 · 0 评论 -
U-Boot-2016.03移植(一)
一:添加开发板配置文件在config目录下按照mx6ull_14x14_evk_emmc_defconfig文件创建配置文件mx6ull_my_emmc_defconfig并修改为如下:CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6ull_my_emmc/imximage.cfg,MX6ULL_EVK_EMMC_REWOR...原创 2019-11-07 17:28:23 · 333 阅读 · 0 评论 -
U-Boot-2016.03启动分析
一:链接脚本分析启动入口u-boot.bin:OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")OUTPUT_ARCH(arm)ENTRY(_start)SECTIONS{ . = 0x00000000; . = ALIGN(4); .text : { *(.__image_co...原创 2019-10-21 17:51:41 · 617 阅读 · 0 评论