猩猩の點燈
这个作者很懒,什么都没留下…
展开
-
U-Boot DM(一):CMDLINE宏
->>parse_stream_outer:u-boot/common/cli_hush.c 解析指令。-->>setup_file_in_str:u-boot/common/cli_hush.c 获取输入指令。-->>cmd_process:最终cmd调用接口。原创 2023-12-25 17:36:28 · 260 阅读 · 0 评论 -
Rockchip Clock
本章节所指的时钟是给SOC各个组件提供时钟的树状框架,而非内核使用的时钟。和其他模块一样,CLOCK也有框架,用以适配不同的平台。适配层之上是客户代码和接口,也就是各模块(如需要时钟信号的外设)的驱动。适配层之下是具体的SOC的时钟操作细节。原创 2023-11-21 16:01:47 · 135 阅读 · 0 评论 -
RK3588-EDGE Ethernet驱动(二)
根据RK3588规格其具备双路原生千兆以太网接口即RGMII。snps,tso;queue0 {};queue1 {};queue0 {};queue1 {};snps,tso;queue0 {};queue1 {};queue0 {};queue1 {};原创 2023-05-29 20:29:25 · 582 阅读 · 0 评论 -
RK3588-EDGE Ethernet驱动(一)
以太网从硬件层来讲大致可分为三部分:CPU,MAC,PHY。上述三部分有以下几种组成方式,而非封装在一颗IC种。CPU内部集成了MAC和PHY,难度较高CPU内部集成MAC,PHY采用独立芯片(主流方案)CPU不集成MAC和PHY,MAC和PHY采用独立芯片或者集成芯片(高端采用)其中常说的GMAC通常是由MAC跟PHY组成,MAC位于数据链路层,而PHY位于物理层。物理层定义了数据传送与接收所需要的电与光信号、线路状态、时钟基准、数据编码和电路等,并向数据链路层设备提供标准接口。原创 2023-05-26 18:08:03 · 1250 阅读 · 0 评论 -
Rockchip GPIO驱动
GPIO驱动老生常谈,GPIO子系统,Pinctrl子系统,Platform框架,中断,设备树都有涉及。作为一个入门驱动加之新版kernel接口的变化,重新对接口进行梳理,当前kernel版本为5.10。1、字符设备2、输入子系统3、Platform总线设备驱动框架4、GPIO子系统5、Pinctrl子系统6、中断7、设备树。原创 2023-03-13 20:07:39 · 360 阅读 · 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启动分析
一:链接脚本分析启动入口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 评论 -
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 评论 -
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 评论 -
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 评论 -
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 评论 -
Linux PWM子系统
PWM:Pulse width modulation,脉冲宽度调制,在 IC 中,是使用定时器来实现。常见应用于显示器背光灯,马达等。原创 2022-09-07 13:46:14 · 602 阅读 · 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 评论 -
DeviceDriver(七):阻塞与非阻塞
一:阻塞与非阻塞1、当应用程序对设备驱动进行操作的时候,如果不能立即获取到设备资源。对于阻塞式IO来讲,会将对应线程挂起,直到获取到设备资源为止。对于非阻塞IO,线程则不会挂起,而是一直轮询等待直到设备资源可以使用,要么就直接放弃。2、应用程序实现方式阻塞式:fd = open("/dev/xxx_dev", O_RDWR); /* 阻塞方式打开 */非阻塞式...原创 2020-01-08 19:33:57 · 253 阅读 · 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 评论 -
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(五):内核定时器
一:内核时间管理1、硬件定时器提供时钟源,时钟源的频率可以设置,设置好以后就可以周期性的产生定时中断,系统就可以使用定时中断来计时。中断周期性的产生的频率就是系统频率也叫做节拍率,比如1000Hz,500Hz,100Hz就是系统节拍率。系统节拍率可以设置,在配置Linux内核时可以进行设置,默认值为100Hz也就是10ms,在Linux内核中用“HZ”表示:# undef HZ# de...原创 2019-12-26 17:43:41 · 150 阅读 · 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(六):中断
一:Linux中断简介 Linux内核提供了完善的中断框架,无需配置寄存器,使能IRQ等,只需要申请中断,然后注册中断处理函数即可,每个中断都有一个中断号,通过中断号即可区分不同的中断,在Linux内核中使用一个int变量表示中断号。二:中断API1、申请中断request_irqint request_irq(unsigned int irq, ...原创 2020-01-07 14:25:46 · 355 阅读 · 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 评论 -
08_网络设备驱动
一:Linux网络设备驱动结构简介 网络设备是完成用户数据包在网络媒介上发送和接收的设备,它将上层协议传递下来的数据包以特定的媒介访问控制方式进行发送,并将接收到的数据包传递给上层协议。与字符设备和块设备不同,网络设备并不对应/dev目录下的文件,应用程序最终使用套接字完成与网络设备的接口。Linux系统对网络设备驱动定义了4个层次,这4个层次为网络协议接口层,网络设备接口层,提供...原创 2019-07-05 16:43:09 · 449 阅读 · 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(十四):多点触摸(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(八):异步通知
一:异步通知 异步通知的核心是信号,它不同于阻塞与非阻塞方式,阻塞方式访问会使应用程序处于休眠态,等待驱动设备可以使用,非阻塞方式则会通过应用程序的poll函数来不断的轮询,查看驱动设备文件是否可以使用。这两种方式都需要应用程序主动去查询设备的使用情况。而异步通知则是驱动主动去通知应用程序自己可以被访问,应用程序获取到信号后就可以对驱动设备进行读写操作,类似于硬件上使用的“中断”...原创 2020-01-11 16:50:38 · 224 阅读 · 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(十三):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 评论 -
02_输入子系统
一:输入子系统简介 输入设备(如按键,键盘,触摸屏,鼠标等)是典型的字符设备,其一般的工作机理是底层在按键,触摸等动作发送时产生一个中断(或驱动通过timer定时查询),然后CPU通过SPI,I2C或外部存储器总线读取按键值,坐标等数据,并将它们放入一个缓冲区,字符设备驱动管理该缓冲区,而驱动的read()接口让用户可以读取按键值,坐标等数据。 显然,在这些工作中...原创 2019-05-06 18:28:15 · 554 阅读 · 0 评论 -
01_字符设备驱动初体验
一:驱动基本框架1:创建入口函数demo_init()和出口函数demo_exit()并用module_init(),module_exit(),MODULE_LICENSE("GPL")函数进行注册二:填充驱动框架1:入口函数中注册设备register_chrdev(),创建类class_create()以及设备节点class_device_create()2:创建入口函数中“注...原创 2019-05-05 17:00:03 · 166 阅读 · 0 评论 -
03_Platform总线设备驱动
一:Platform总线简介 linux设备驱动模型中,需关心总线,设备和驱动这三个实体,总线将设备和驱动绑定。在系统每注册一个设备的时候,会寻找与之匹配的驱动;相反的,在系统每注册一个驱动时,会寻找与之匹配的设备,而这种匹配就是有总线来完成。 一个现实的linux设备和驱动通常都需要挂接在一个总线上,对于本身依附于PCI,USB,I2C,SPI等的设备而言,这...原创 2019-05-07 15:33:53 · 512 阅读 · 0 评论 -
04_Framebuffer设备驱动
一:framebuffer设备驱动简介 Framebuffer(帧缓冲)是linux系统为显示设备提供的一个接口,它将显示缓冲区抽象,屏蔽图像硬件的底层差异,允许上层应用程序在图像模式下直接对显示缓冲区进行读写操作。对于帧缓冲设备而言,只要在显示缓冲区中与显示点对应的区域内写入颜色值,对应的颜色会自动在屏幕上显示。 下图为linux帧缓冲设备驱动的主要结构,帧缓...原创 2019-05-07 18:26:56 · 797 阅读 · 0 评论 -
05_触摸屏驱动
一:触摸屏驱动简介 触摸屏驱动采用第二章所讲的“输入子系统”框架,用户根据触摸屏编写设备驱动程序input_dev,输入子系统会调用纯软件部分tsdev.c与之匹配,详细参考:https://blog.csdn.net/qq_34968572/article/details/89875957二:触摸屏硬件介绍 电阻式触摸屏是一种传感器,它将矩形区域中触摸点(...原创 2019-06-05 17:26:55 · 1199 阅读 · 0 评论 -
06_USB设备驱动
一:Linux USB驱动介绍1:USB驱动简介 USB采用树形拓扑结构,主机侧和设备侧的USB控制器分别称为主机控制器(Host)和USB设备控制器(UDC),每条总线上只要一个主机控制器,负责协调主机和设备间的通讯,而设备不能主动向主机发送任何信息。 从主机侧观察,在Linux驱动中,处于USB驱动的最底层的时USB主机控制器硬件,在其上运行的时USB主...原创 2019-06-13 10:00:06 · 686 阅读 · 0 评论 -
07_块设备驱动
一:块设备介绍 块设备是与字符设备并列的概念,两者在驱动结构上有较大差异。缓冲,I/O调度,请求队列等都是与块设备驱动相关的概念。块设备驱动较字符设备驱动复杂得多,在I/O操作上也有很大不同:(1):块设备只能以块为单位接收输入和返回输出,而字符设备则以字节为单位。大多数设备是字符设备,因为它们不需要缓冲而且不以固定块大小进行操作。(2):块设备对于I/O请求有对应的缓冲...原创 2019-07-02 13:50:23 · 166 阅读 · 0 评论