
全志H5 Linux-4.11
jklinux
一个linux下的渣渣老码农
展开
-
01 H5 uboot编译及烧写
nanopi_neo2 和 orange pi zero plus 2 都是基于全志H5芯片做的方案, 板上的硬件都是一样的, 参数: 它们的代码可以共用.uboot源码下载: git clone https://github.com/friendlyarm/u-boot.git内核源码下载: git clone https://github.com/friendlyarm/l原创 2017-11-04 10:45:09 · 3731 阅读 · 12 评论 -
02 H5 linux内核编译及启动
解压缩linux内核源码包后,在内核源码目录下打开终端://配置内核, 也就是指定使用什么架构,什么Soc, 什么板等信息. 配置文件在arch/arm64/configs目录下.make sunxi_arm64_defconfig ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-//编译内核,生成Image镜像.make Image ARCH=arm64原创 2017-11-04 16:06:10 · 2803 阅读 · 1 评论 -
03 H5用busybox制作64位文件系统
busybox的源码可以在官网https://www.busybox.net/downloads/下载. 这里下的版本是busybox-1.27.2.tar.bz2解包后,在终端进入busybox-1.27.2目录下操作:配置busyboxmake menuconfig CROSS_COMPILE=aarch64-linux-gnu-//备注: 在出现的配置界面里,按"/"键可查找所需命令的选原创 2017-11-06 09:52:52 · 1935 阅读 · 0 评论 -
04 H5使用usb_otg接口作虚拟设备
此功能是使用linux内核usb子系统里gadget实现的. 配置内核,使用gadget里所需的功能模块://在内核源码目录下打开终端:make menuconfig ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-Device Drivers ---> [*] USB support ---> <*> USB Gadget Sup原创 2017-11-06 13:15:15 · 2743 阅读 · 4 评论 -
05 H5程序测试方法和not found的问题
为了方便测试程序,可以把源程序放在pc上的nfs共享目录里, 编译后,板上可以挂载此共享目录,直接执行在pc上编译出来程序了.// test.c#include <stdio.h>int main(void){ printf("hello arm64\n"); return 0;}如果用gcc编译出x86架构的程序,在板上执行会报下面的错误信息:./a.out: line 1:原创 2017-11-06 16:26:44 · 1905 阅读 · 0 评论 -
06 H5直接使用网络文件系统
H5板上有提供有线网卡接口,可以在内核启动进入内存文件系统后,再进入网络文件系统。这样比使用sd卡上的文件系统更便于调试开发.// 在pc上准备好文件系统, 如我已把前面busybox编译得到并已配置好的_install整个目录复制并改名为"/disk3/h5fs"在pc上配置共享nfs目录, 修改/etc/export文件,增加:/disk3/h5fs *(rw,sync,insecure,n原创 2017-11-07 10:04:08 · 1201 阅读 · 1 评论 -
07 linux内核device-tree基础
设备树是用一个类似文本的dts文件来描述所有硬件相关的内容. dtb是dts文件编译后得到的文件. dtc命令可以把dts文件编译成dtb, 也可以把dtb文件反编译成dts.H5所用的dts文件在内核源码目录arch/arm64/boot/dts/allwinner/里.dtsi文件是多个方案的设备树共用部分,像c的头文件可在设备树文件里include引用. 现H5方案用的dts是: sun5原创 2017-11-19 15:49:54 · 1447 阅读 · 0 评论 -
08 在设备树里描述platform_device
在设备树的dts文件里,带有compatible属性的节点就是表示一个设备.在设备树里增加一个设备,则在内核里的dts文件里描述设备节点即可. 在H5方案里,则在arch/arm64/boot/dts/allwinner/sun50i-h5-nanopi-neo2.dts文件里。 如在dts文件里加入以下内容: mynodes@77885566 { /* 则创建出来的platform_de原创 2017-11-19 16:52:56 · 4117 阅读 · 0 评论 -
09 linux设备树里的gpio应用
参考内核源码里的Documentation/devicetree/bindings/gpio/gpio.txt 在设备树里的节点设备需要使用到gpio口,则需要在一个或多个节点属性里提供gpio口的信息.关于gpio口信息的节点属性命名方式是: name-gpios , 其中name用于指此gpio口在设备里的具体用途. 如用于复位的io口,则属性可以命名为: reset-gpi原创 2017-11-20 12:31:13 · 12037 阅读 · 0 评论 -
10 linux设备树的gpio和gpio中断应用实例
现把一个蜂鸣器模块的控制引脚接到板上的PL11, 当输出低电平时蜂鸣器响,低电平时就不响. H5芯片上有两个gpio控制器, PL组gpio口单独在一个gpio控制器上.PL组的gpio控制器在设备树里的描述: r_pio: pinctrl@01f02c00 { /* 可通过此基础区分gpio控制器 */ compatible = "allwinner,s原创 2017-11-20 17:08:19 · 6431 阅读 · 0 评论 -
11 H5上实现超声波测距模块的设备驱动
//超声波测距模块共有4个引脚: VCC, GND, Trigger, Echo//工作过程: 要开始测量时,Trigger引脚给10us以上的高电平.// Echo引脚会从开始测量到测量结束持续高电平(从上升沿到下降沿)// 测量的距离: (Echo持续的高电平时间 * 340M/s)/2PA12作超声波模块的trigger引脚, PA11作超声波的echo引脚.//注意电源需原创 2017-11-21 15:55:11 · 1239 阅读 · 0 评论 -
12 H5上实现dht12单总线工作方式的驱动
具体的硬件工作原理可参考:http://blog.youkuaiyun.com/jklinux/article/details/73460008dht12发出的二进制数据0的周期(从下降沿开始)大约78微秒, 数据1的信号周期大约120微秒.通过捕捉数据脚的下降沿中断的间隔时间来计算接收到的数据是二进制0和1. 但全志方案里的gpio控制器默认是使用32Khz的工作时钟信号,频率过低会丢失中断信号,需要把gpi原创 2017-11-24 14:45:29 · 1170 阅读 · 0 评论 -
13 linux内核里实现中断底半部处理的新方法
原实现底半部的方法参考:http://blog.youkuaiyun.com/jklinux/article/details/73550804现内核提供了新的中断请求函数,这个中断请求函数用于指定中断号为irq的中断顶半部和底半部的处理, 底半部是由内核线程来实现处理的(此底半部里可以作休眠的处理).int request_threaded_irq(unsigned int irq, irq_handler_原创 2017-11-25 10:14:39 · 712 阅读 · 0 评论 -
14 在H5上实现的矩阵键盘驱动
矩阵键盘工作原理参考: http://blog.youkuaiyun.com/jklinux/article/details/73649292实现一个2x2的矩阵键盘驱动, 在设备树里的描述: mykeypad { compatible = "mykeypad"; /* 行线的io口, 以数组的形式列出 */ row-gpios = <&pio 0 12原创 2017-11-25 16:38:50 · 907 阅读 · 0 评论 -
15 内核里leds-gpio设备驱动的设备树方法
在linux内核里已提供了连接到gpio的led设备驱动,只需要通过platform_device或设备提供相应的硬件资源即可. 使用platform_device方法可参考: http://blog.youkuaiyun.com/jklinux/article/details/73850470内核里的leds-gpio设备驱动配置选项:make menuconfig ARCH=arm64 CROSS_COM原创 2017-11-27 14:57:48 · 9243 阅读 · 0 评论 -
16 内核里gpio-keys设备驱动的设备树描述
此设备驱动适用于连接到一个具有中断功能的io口的按键驱动. 使用platform_device方法可参考:http://blog.youkuaiyun.com/jklinux/article/details/73828786此设备驱动在内核里配置:make menuconfig ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Device Drivers --->原创 2017-11-27 15:55:56 · 8800 阅读 · 2 评论 -
17 H5里的i2c控制器驱动
i2c传输协议请参考: http://blog.youkuaiyun.com/jklinux/article/details/73920503H5里共有4个i2c控制器。Soc里的控制器都是由芯片厂家负责驱动好的. 在内核源码里相关的配置:make menuconfig ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -> Device Drivers ->原创 2017-11-30 14:10:50 · 1673 阅读 · 0 评论 -
18 i2c控制器之应用程序的调用
通常情况下,i2c设备驱动里应是通过调用已驱动好的i2c控制器来实现i2c设备的操作的。但i2c控制器驱动里也直接提供应用程序调用的接口,可用于实现应用程序直接读写操作的设备。 //注意这种方法只适用于仅需读写操作的简单设备. 如eeprom, dht12这些设备.使用这种方法前,除i2c控制器需要驱动好外,内核里也需要选上:make menuconfig ARCH=arm64 CROSS_CO原创 2017-11-30 15:25:33 · 1479 阅读 · 1 评论 -
19 i2c的dev-interface实现eeprom的读写
eeprom是用于存放小量数据的存储芯片。 at24c02就是使用i2c接口的eeprom的一种.at24xxx eeprom的工作原理参考: http://blog.youkuaiyun.com/jklinux/article/details/74162876dev-interface就是i2c控制器供应用程序调用的接口.不熟识的话请参考: http://blog.youkuaiyun.com/jklinux/artic原创 2017-12-01 09:17:37 · 1043 阅读 · 0 评论 -
20 设备树里声明i2c设备
参考内核源码目录里的Documentation/i2c/instantiating-devices 文档里主要的内容:Method 1b: Declare the I2C devices via devicetree-------------------------------------------------This method has the same implications as m原创 2017-12-01 14:24:24 · 3785 阅读 · 2 评论 -
21 使用设备树的i2c设备驱动
在内核里表示i2c设备驱动的结构体有点小变化:struct i2c_driver { int (*probe)(struct i2c_client *, const struct i2c_device_id *); //当使用id_table进行匹配时, 会把匹配上的i2c_device_id变量地址传过来. int (*remove)(struct i2c_cli原创 2017-12-01 16:20:53 · 4331 阅读 · 6 评论 -
22 使用内核里的at24-eeprom设备驱动
at24-eeprom设备驱动在内核里的配置选项:make menuconfig ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-Device Drivers ---> Misc devices ---> EEPROM support ---> <*> I2C EEPROMs / RAMs / ROMs原创 2017-12-01 17:10:57 · 3562 阅读 · 6 评论 -
23 H5的spi控制器驱动
spi工作原理参考:http://blog.youkuaiyun.com/jklinux/article/details/74287735在内核里的配置选项:make menuconfig ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Device Drivers ---> [*] SPI support ---> <*> Allwin原创 2017-12-03 14:06:13 · 1950 阅读 · 0 评论 -
24 设备树里描述spi设备
spi设备驱动模型参考:http://blog.youkuaiyun.com/jklinux/article/details/74331212内核文档里没有直接增加spi设备的驱动方法, 但可通过设备树里现有spi设备的描述来学习.spi设备在设备树里像描述i2c设备一样,需要在spi控制器节点里用子节点描述spi设备节点:&spi0 { /* spi控制器节点 */ ... cs-gpios原创 2017-12-03 15:06:49 · 10359 阅读 · 0 评论 -
25 设备树里直接提供gpio口的中断号
通常是在设备树的设备节点里通过属性提供所用的gpio口,再在设备驱动代码里根据gpiod_to_irq(…)找到gpio口对应的中断号来使用.但有些场合下并不完全适用.如在描述i2c设备/spi设备时, 它们可以直接提供中断号:struct i2c_client { unsigned short flags; unsigned short addr;原创 2017-12-04 11:00:39 · 7061 阅读 · 2 评论 -
26 设备树里mcp2515的描述
mcp2515工作原理及使用spi_board_info描述设备的方式请参考:http://blog.youkuaiyun.com/jklinux/article/details/74347820mcp2515设备驱动在内核里的配置:make menuconfig ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-[*] Networking support --->原创 2017-12-04 14:55:52 · 4678 阅读 · 0 评论 -
27 在H5上实现spi-tft屏的简单驱动
屏的购买链接:https://item.taobao.com/item.htm?spm=a1z10.5-c-s.w4002-16248799892.67.1b6f9109XnyTYo&id=520967019281内核里设备树关于spi屏的描述:&spi1 { #address-cells = <1>; #size-cells = <0>; status = "okay";原创 2017-12-05 10:37:54 · 4355 阅读 · 5 评论 -
28 H5上rtl8189ftv wifi驱动移植
现板上带有一个sdio接口的wifi芯片: sdio其实也就是sd/mmc的接口,只是协议有区别而已.所以使用sdio接口,需要先把sd/mmc的控制器驱动才可以.通过官网的说明: http://linux-sunxi.org/Wifi#RTL8189FTV rtl8189ftv型号的wifi用的就是rtl8189ES驱动. 与型号8189fs一致.下载驱动源码: git clone https原创 2017-12-07 09:48:47 · 13161 阅读 · 1 评论 -
29 使用内核里的W25Q32设备驱动
W25Q32是一个spi接口的存放芯片, 容量32M比特(4M字节).驱动文件在"drivers/mtd/devices/m25p80.c"static struct spi_driver m25p80_driver = { .driver = { .name = "m25p80", .of_match_table = m25p_of_table...原创 2020-01-09 15:40:48 · 2250 阅读 · 0 评论