自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

原创 三、系统频率

目录一、系统时钟来源二、时钟系统三、系统主频修改3.1 PLL1系统主频3.2另一路频率设置3.3 总结4、代码一、系统时钟来源之前的实验中都是采用默认的时钟配置,IMX6ULL默认时钟是396MHz,本节就来配置IMX6ULL使其工作在推荐的528MHz,先看芯片的时钟来源,打开芯片核心板原理图可以看到,芯片已经接了一个32.768KHz的晶振,这个晶振的频率很小,它是用来为系统的实时时钟RTC提供时钟的,一般的,XTALI和XTALO就是系统的时钟引脚,可以查

2021-01-14 23:08:21 10

原创 二、启动方式和烧写镜像

第一次的led使用是把生成的bin文件烧到了SD卡,然后从SD卡启动的,这一节就来看一下IMX6ULL的启动方式的选择打开参考手册,找到系统启动这一节,这一节其实已经很详细的说明了启动方式,启动方式手册中说,在系统上电的时候,芯片内部的boot Rom会根据eFUSEs或者BOOT_MODE[1:0]的状态来选择启动设备,boot Rom支持的启动设备有下面这些关于eFUSEs的启动方式选择就不考虑了,一般的芯片主要都是通过IO口的状态来选择启动设备的,IMX6ULL的两个启动引脚就对应4中启动选

2021-01-10 12:56:57 9

原创 一、汇编LED

本篇作为IMX6ULL平台学习的开篇,从此很长一段事件将学习IMX6的开发,也在此对自己立下学习要求,当以认真,谦恭的态度往后学习。好了,开始吧。拿到每一个新的开发板,进行的第一个实验必然是LED的实验,LED在嵌入式的学习中就和软件中的"Hello world"一样重要,更重要的是通过LED实验了解一个新的平台下的GPIO的操作方法,之前接触过IMX6的开发平台,也没有系统的了解过它的IO操作方法,现在来了解一下一、IMX6ULL IO管脚复用功能根据以往的嵌入式开发经验,都知道对于芯片的IO口在

2021-01-08 21:13:19 20

原创 Linux驱动之热插拔

这篇文章简单记录一下有关Linux驱动中的热拔插,在Linux内核驱动开发的时候经常会在程序里创建类,在类中创建设备,比如下面这一段,是从以前的代码中摘抄出来的major = register_chrdev(0, "fifth_drv", &sencod_drv_fops);fifthdrv_class = class_create(THIS_MODULE, "fifth_drv");fifthdrv_class_dev = class_device_create(fifthdrv_c

2020-10-12 22:32:17 56

原创 Linux驱动之I2C创建实例

在上一节中,简单的介绍了Linux-3.4内核中的i2c驱动框架,那么,接下来,就来实际的创建i2c的驱动实例,加深对Linux内核中的i2c驱动的理解1、方法一第一中方法其实就是上节内容中所说的方法,现在来简单回顾一下,上节的内容最后的出来的结论是在系统开始运行之后,和架构相关的mach-xxxx.c文件先运行起来,这个文件中定义有i2c_board_info相关的结构体,结构体包含i2c设备的名字和地址,然后调用i2c_register_board_info 注册i2c_board_info

2020-05-25 23:29:44 116

原创 Linux驱动之I2C框架(3.4内核)

在上一节的文章中介绍了在linux2.6内核中的I2C驱动框架,2.6内核现在已基本上不再使用了,可能版本有点太老了,但对于我们分析内核结构来说也不算过时,看懂旧的再看新的也就没有那么大的压力了,那今天就来分析一下Linux3.4内核中的I2C框架吧分析文件·drivers/i2c/busses/i2c-s3c2410.c注册平台设备驱动,查看probe函数的内容我只截取部分内容,从这些内容中就可以看出套路其实和之前的差不多,也是定义一个关于i2c的结构体,然后去设置这个结构体,设置的时候有一

2020-05-20 22:38:15 46

原创 Linux驱动之I2C框架(2.6内核)

i2c协议对于做嵌入式开发来说应该是必须要了解的一个协议了,也是最基本的一个协议,对i2c协议的物理特性的介绍和i2c设备的操作在我的裸机编程部分有讲解,今天来探索内核中的I2C的真正面目,使用内核:linux-2.6.22.6和以前一样,也是来看一个具体的文件来开始分析(drivers\i2c\busses\i2c-s3c2410.c)文件的入口,很简单,注册了平台软件驱动,重点来看结构体中的probe函数,下面来分步看一下这个函数的内容分配了一个s3c24xx_i2c结构体对象,使能i2c时钟

2020-05-17 22:03:03 38

原创 Linux驱动之触摸屏

这一节来学习触摸屏的知识,在之前的裸机编程中也有一节是介绍触摸屏的知识,所以这一节对于触摸屏的特性的介绍就不会太多,主要来看看在内核中,触摸屏的驱动是如何来实现的,先来看实例代码drivers/input/touchscreen/s3c2410_ts.c,从这个位置就可以知道,它是使用输入子系统来实现的先从入口函数看起,它也是注册平台设备驱动,看一下结构体的内容,从最重要的probe函数开始分析这个函数我只展示了部分的内容,从它的函数体就可以看出来,它主要干了这么几件事情1、分配了一个input_

2020-05-15 22:13:15 136

原创 Linux驱动之LCD程序编写

在上一节中,分析了内核中的LCD的驱动框架,不要被内核中复杂的调用过程把我们搞迷糊了,总结起来就是以下几点1、分配fb_info结构体2、设置fb_info结构体3、注册fb_info结构体是不是很简单,软件层面的fbmem.c不需要我们去管,当然,如果你想要去深入分析的话,剩下的硬件层面的代码就做了那么三件事情,这一节,来编写具体的内核LCD驱动,遵循上面的编程流程先来分配一个结构体,然后去设置它,在设置的时候要注意,fb_info结构体中有一个成员是固定的,就是表示这个设备的一些常用的参数,比

2020-05-11 22:39:45 66

原创 Linux驱动之LCD框架介绍

在裸机编程的时候,曾经编写过LCD的测试程序,对这一部分不是很了解的可以先去看一下,我们今天要做的是基于Linux内核框架下的LCD驱动程序,内核版本,Linux-2.6.22.6内核中已经集成了LCD的驱动框架,在driver/video/fbmem.c,打开这个文件,发现它是符合字符设备驱动的编写流程,下面是它的入口函数注册了一个字符设备驱动,主设备号FB_MAJOR是29,要注意的是在入口函数里注册了类,但是并没有在类下注册设备,先来看看它的操作函数集合中的函数上面的是open函数的详情,

2020-05-11 21:21:01 55

原创 内核移植之修改分区创建文件系统

在上一节最后我们已经成功传递了机器id,启动了内核,但是在挂接跟文件系统的时候出现了错误,这一节的内容我们就来解决这些问题1、修改内核分区先来修改内核中的分区信息,后面再来解决文件系统的问题,原来的内核在启动的时候会打印出分区的信息,可以根据这些输出信息来在内核中定位出分区信息的位置,由于我当时在启动的时候没有保存那些信息,所以这里就无法显示,我使用的smdk2440单板的分区信息是在arc...

2020-04-26 23:50:35 45

原创 内核移植之初步设置单板

uboot的移植先告一段落,从这节开始进入内核的移植,,移植的内核的版本为Linux3.4.2,编译器的版本为arm-linux-gcc 4.3.2把linux内核的压缩包传到服务器上,解压,进入内核目录,首先要做的事就是编辑顶层的Makefile,要使用我们的编译环境在编译内核的时候要使用配置文件,路径是**/arch/arm/configs/,进入这个目录去查看和我们相关的配置文件,...

2020-04-24 22:07:15 67

原创 uboot移植之剪裁和烧写文件系统

通过前面几节的内容,uboot基本上已经移植成功了,把它烧入单板中可以成功启动,并且具备网络下载功能,如果也已经烧录了内核和文件系统,启动是没有问题的,今天这一节来做最后的事情,就是uboot的剪裁和一些结尾,之前我们编译好的uboot很大,有500多k,因为它里边包含了很多我们用不上的模块,就需要剪裁uboot,去掉那些不需要的模块,减小它的大小在之前的启动信息里,有如下的错误警告** Wa...

2020-04-21 23:31:08 54

原创 uboot移植之网卡

经过前面的几节内容,我们的uboot移植已经支持了nor flash启动和nand flash启动了,这一节的内容是让Uboot支持DM9000网卡,就可以使用tftp下载文件了,速度要比串口下载快很多第一步先找到DM9000的文件–driver/net/dm9000.c,在这个文件的同目录下查看Makefile可以看到,要是想编译dm9000.c这个文件,就必须定义CONFIG_DRIVE...

2020-04-19 20:43:24 933

原创 uboot移植之设置单板nor启动和nand启动

在上一节的内容里,只是初步的修改了uboot的时钟、SDRAM,让uboot在从nor启动的时候可以顺利的启动起来,然后添加了我们自己的重定位代码和对nand flash的操作,为从nand启动的时候代码重定位做准备,其实uboot还并没有可以正常的启动起来,这一节就来实现uboot的nor启动和nand启动,这节过后,我们的uboot就可以正常的启动了1、nor启动上一节uboot启动的时候...

2020-04-17 22:24:07 86

原创 uboot移植之添加单板和NAND启动

在学习完裸机知识后进入到了uboot的学习,最开始对uboot的完全不了解,慢慢的去看uboot的源码,分析它的结构,最近开始做uboot的移植,在这里也不是说要展示什么,只是把自己在移植的过程中遇到的问题和一些过程记录下来,方便以后查看,好了,我们可以从官网上下载uboot,我们使用的是uboot-2012.04.01,这个版本的uboot里并没有对s3c2440单板的支持,所以,把它下载到24...

2020-04-10 22:20:11 120

原创 再提代码重定位

最近在做uboot的一些移植工作,在过程中遇到了很多的问题,有的问题是由于概念不清楚而引发的,其中就包括代码重定位,也不全是代码重定位,牵扯到程序执行的一些地址,关于代码重定位的问题,我在另一篇文章中也做了简单的介绍,这次遇到的问题我也花了一些时间进行了总结,在此把自己的感想做以记录,不对的地方还请指出1、两个地址加载地址:存储地址运行地址:链接地址,运行时所处的地址区别:加载地址简单的说...

2020-04-09 22:44:59 56

原创 ADC和触摸屏

一、ADC和触摸屏介绍这节内容我们来介绍S3c2440上边的ADC和触摸屏,ADC,Analog-to-Digital Converter的缩写,是一种把模拟信号转换为数字信号的转换器,比如我们要测量接有一个变阻器的电路的电压,2可以通过ADC进行转换,把电路的模拟信号转换为方便我们阅读的数字信号,S3c2440上的ADC是一个10位的转换器,可以接收8路的模拟输入信号,触摸屏的模拟电压信号也...

2020-04-04 21:00:21 92

原创 LCD初步测试

1、lcd基本知识今天这篇文章来介绍使用s3c2440来操作lcd的过程,在开始之前首先来介绍关于lcd的一些概念。lcd就是我们常说的显示设备,常用的是TFT lcd和STN lcd,lcd能显示一张图片就是因为在它内部存在一个电子枪,电子枪把缓存里的数据拿出来一个一个打到显示屏上,根据显示屏的分辨率来决定发出多少数据,关于更多它内部的工作细节我们在此不去深究,了解它的大概的工作原理就...

2020-03-28 18:04:34 169

原创 uboot的配置、编译分析

在这篇文章里将来介绍s3c24x0的uboot的配置和编译的过程,首先,我们知道uboot在编译之前还要有其他的操作,分别是解压缩:拿到手的uboot一般是一个压缩包,第一步需要先解压缩(废话)打补丁:下载的uboot是从官网上下载的,所以它可能不是我们想要的,要想添加适合我们自己的功能,就要有一个自己的补丁文件,然后打补丁(patch -p1 < …/u-boot-1.1.6_jz...

2019-12-24 10:48:24 35

原创 输入子系统(二)

在上一节中介绍了Linux内核中的输入子系统的框架,在对输入子系统框架有了大概的了解之后,这一节来实际的编写代码,加深对输入子系统的理解,在写程序之前先来梳理一下,使用输入子系统编写程序的步骤1、最开始肯定是要注册一个代表物理硬件的input_device,这样的话,在内核成功识别之后才能对我们需要操作 的设备进行操作,2、提供对应的硬件操作函数 可以看出,在使用这个框架来编写程序之后,...

2019-12-14 21:25:52 34

原创 输入子系统(一)

1、框架之前写的驱动程序都是使用自己的框架,也只有我们自己知道在测试时该打开什么设备,那么,内核中提供了一套框架,将这些输入设备都进行了统一和规范化,这就是今天要来介绍的输入子系统打开内核source insight工程,在drivers目录下找到input.c,这是输入子系统的最开始的文件,从这里进行分析从上面这张图可以看到,input.c在它的入口函数里先注册了一个名为inout的类...

2019-12-14 14:37:21 52

原创 C函数形参传递

在上大学的时候,C语言的教材上有这么一个经典的案例–编写函数来交换两个数的值。这个案例针对的是C语言函数参数的传递过程,先来复习一下这个过程。上面的函数是第一个版本的交换两个数的代码,看上去没有问题,然后执行的结果却和我们预期的不一样从打印结果来看,在my_swap函数里确实是把a和b的值交换了,但是m和n的值还是原来的值,按道理来说m,n和a,b是对应的,所以,从结果来看,my_swa...

2019-12-11 19:52:14 187

原创 异步通知

前面分别使用了查询、中断、poll机制编写驱动程序之按键驱动,这一节中来介绍另外一种机制—异步通知。所谓的异步通知就是应用程序不再主动的去查询按键的模式,它可以去做别的事情,一旦有了按键事件发生,驱动程序将主动的通知应用程序来读取按键值,该机制使用的就是Linux下的信号signal来实现的,先来看看应用程序的写法void my_signal_fun(int signum){}int m...

2019-12-10 23:52:30 42

原创 同步互斥

这一节来了解一下字符设备驱动中的同步互斥模式,同步互斥模式就是在一个时刻只能有一个应用程序打开这个字符设备驱动,其他的应用程序要想打开必须要等另一个应用程序关闭之后才能打开这个字符设备,实现同步互斥机制的方法有很多,最简单的方法就是定义一个变量,让这个变量的初始值等于1,在第一个程序打开驱动之后让变量减一变为0,当另一个应用程序到来的时候,首先去判断这个变量的值,读取到变量的值为0,再减一的话就变...

2019-12-10 23:32:13 43

原创 poll机制

1、在之前的按键驱动程序里分别使用了查询和中断的模式,1、使用查询的时候程序需要在一个循环里不停的去,读取按键的状态,这个时候可以看到CPU的使用率是非常高的。2、改进之后使用中断的模式进行查询,虽然在中断里可以让进城休眠,依次来降低CPU的占有率,但是若没有发生中断程序会一直在等待,很显然,这样的情况也不是我们想要的。今天继续对这个程序进行改进,使用的是另一种机制-poll,在进行应用...

2019-12-09 23:06:41 49

原创 按键-中断

1、介绍1、本节来写使用中断的按键程序,使用中断的时候有两个重要的函数,使用"request_irq()"函数来注册一个中断程序,使用"free_irq"函数来卸载注册的中断服务函数。2、既然是使用中断,那么就不能像使用轮询的时候那么消耗CPU资源,使用休眠和唤醒的机制应用程序在读按键引脚状态的时候,如果没有按键按下的使用让程序休眠在这里,使用"wait_event_interruptib...

2019-12-07 23:32:35 47

原创 使用驱动程序点亮LED灯

继第一节第一个驱动程序框架记录之后,本篇文章将会在上一篇驱动程序的框架下编写点亮LED的驱动程序,同样会对上一个框架进行修改,优化。接下来进入正题1、点亮LED程序框架分析在最开始之前先来梳理一下点亮LED程序的框架1、通过对驱动程序的框架分析,我们知道第一步都要从入口函数开始,第一个驱动里我写的入口函数很简单,只是完成了必要操作这里的话就要进行改进。2、要点亮LED首先要对LED使用的...

2019-12-04 23:26:40 161 1

原创 第一个驱动程序

从今天开始就要进入内核驱动程序部分了,在这一节里就通过第一个驱动程序来介绍一下内核驱动模块的编写框架。static int first_drv_open(struct inode *inode, struct file *file){ printk("first_drv_open\n"); return 0;}static ssize_t first_drv_write(struct...

2019-12-02 23:54:22 96

原创 SPI

SPI协议是我们学习的另一个重要的协议,在之前的文章中介绍了IIC协议的基本概念以及实际编程中的一些需要注意的部分,这篇文章中就来介绍SPI协议**1、**基本介绍SPI协议也是一种主从结构,和IIC不同的是SPI协议通常有四根线对于主设备来说1、SCLK:时钟线,由主设备产生,为从设备提供时钟同步吗,一般在SCK的上升沿锁存数据2、MOSI :"从入主出",主设备的输出线,数据高位先...

2019-11-25 23:09:38 45

原创 IIC(三)

前面两节分别介绍了IIC协议的硬件接口和jz2440开发板上的IIC控制器,这一节就来写程序进一步熟悉IIC协议的操作过程,首先来看一下本节程序的结构1、程序结构上面的图是本节程序的结构图,采用这种分层的方式编写程序,每一层都负责具体的一部分,这使得程序的结构性紧凑,降低程序之间的耦合性,在添加新设备的时候也是非常方便的1、测试程序:测试程序它主要是提供测试菜单,并进行初始化,一般是由最上...

2019-11-17 14:19:55 58

原创 添加自己的软件包

openwrt的package目录下存放着系统使用的一写软件包,现在来尝试自己编写一个简单的软件包,然后把它编译进系统中1、在package目录下创建一个新的文件夹hello2、在hello文件夹下创建Makefile3、创建src文件夹,用来存放我们的源码4、进入src文件夹,创建文件hello.c和Makefile回到上一层,编写Makefile# # Copyright (C...

2019-11-15 15:50:15 56

原创 IIC(二)

在上一节中了解了IIC协议的基本内容和硬件接口,其实可以发现,虽然IIC控制简单(只有SCL和SDA两条线),但是IIC的控制时序还是有一点麻烦的,在使用IIC协议操作设备时有两种方式,一种使用GPIO来模拟SDA和SCL,这时候就要严格按照上一节中IIC的时序要求来操作GPIO,比如IIC协议的数据时高位先行,那么就要把要发送的数据一位一位的进行拼装,然后将SCL的gpio引脚拉低,将数据发出去...

2019-11-13 23:36:15 65

原创 周期性脚本

最近在工作中碰到一个需求,需要在Linux系统上去定时监控一个进程是否还存在,如果不存在的话就要去启动它,要完成这个需求首选使用脚本来实现,首先,要在Linux系统上去定时执行一个脚本就要用到Linux的周期性任务计划,crontab -l 可以查看当前用户有哪些计划任务, crontab -e 可以编辑计划任务,这个命令本质上是去/etc/crontab这个路径下,当前用户的周期性任务信息...

2019-11-13 15:13:57 90

原创 IIC(一)

在嵌入式领域IIC协议可谓是应用的非常广泛了,有很多IIC协议的设备,而且大多数开发板上都会具备IIC总线,所以,IIC的学习可以说是必不可少的,在我使用的这款jz2440开发板上同样支持IIC设备的控制,今天就来记录一下IIC的学习过程。1、IIC协议IIC是一种设备之间用来通信的协议,IIC协议非常简单,只要操作两根线就可以操作设备,来先看看IIC的物理协议接口从图中可以看出IIC是一...

2019-11-13 14:07:53 74

原创 多路复用-select

现实中我们写的很多网络通信的程序都不可能是一对一的,很多时候需要来实现一个并发的服务器来满足更多用户的接入,而对于并发的实现也有好几种方式,多线程、多进程、多路复用。多路复用对于多路复用这种方式也有好几种实现方式:poll、epoll、select,虽然用起来有一些不同的细节,不过都大同小异,在我的程序中使用的是select.先说一下我的需求,其实我只有一个sockfd文件描述符,只是一个u...

2019-11-07 19:45:00 51

原创 Nand flash基本操作

在本节内容中总结之前的nand flash操作,在另一篇文章中介绍了关于nor flash的一些测试,在那里简单的介绍了一下nor flash和nand flash的一些区别,这篇文章就来详细讲解一些nand flash的操作过程使用开发板:jz2440nand flash芯片:1、nand flash引脚介绍在最开始的时候先来看一下jz2440上面的nand flash原理图,这一步好像...

2019-11-04 11:10:45 129

原创 nor flash操作

这一节来了解在jz2440上的nor flash的操作,jz2440上有nor flash和nand flash,这两种flash是有差别的,基本的差别如下nornand接口像内存一样,引脚较多引脚少,可以复用容量小大读操作简单,像内存一样直接读复杂,需要使用指令写操作使用命令来写(慢)使用命令来写(快)特性无位反转存在位反转,坏...

2019-10-25 09:50:47 128

原创 外部中断—按键

中断时学习每一款芯片都必须去了解的机制,CPU采用中断可以节省掉轮训带来的性能损耗,关于对jz2440的外部中断的学习,在此简单进行总结1、中断框架在jz2440芯片中,所有的中断都接到了中断控制器上,当发生中断的一瞬间,中断控制器首先获得了中断源发生的中断,然后根据配置选项是否上报CPU,CPU再对这个中断进行处理,在处理的过程中会由硬件设置跳转到固定的地方进行处理,这就是中断向量表从这...

2019-10-21 23:01:54 408

原创 UDP通信问题小结

最近在看一个关于UDP通信的实例的程序,从中对UDP通信有了一些不一样的认识,之前对udp与tcp的区别只是停留在下面这样宏观的认知上1、TCP面向连接(如打电话要先拨号建立连接)。UDP是无连接的,即发送数据之前不需要建立连接。2、安全方面的区别TCP提供可靠的服务,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达。UDP尽最大努力交付,即不保证可靠交付。从上面的区别来看,在...

2019-10-18 11:01:49 224

空空如也

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除