- 博客(48)
- 收藏
- 关注
原创 移植Qt5.6
交叉编译工具:arm-linux-gcc-4.4.3内核:linux-4.12.0(使用移植linux-4.12到JZ2440里的linux-4.12,按照2.4 制作补丁内容获取内核,补丁下载地址:https://pan.baidu.com/s/1_uyLxOIgwVGCJPip5RcFNQ)制作好的网络文件系统目录:/work/tools/fs_mini/(使用制作文件系统里制作的文件系统)开...
2019-02-18 11:00:47
1378
原创 移植之前所有驱动(基于linux-2.6.22.6)到linux-4.12内核
之前编写的驱动都是基于linux-2.6.22.6内核的,下面将所有驱动移植到linux-4.12内核上,linux-4.12使用的是移植linux-4.12到JZ2440里移植的内核,使用2.4 制作补丁的方法获得该移植好的linux-4.12内核。目录1. 移植网卡驱动 1.1 准备文件 1.2 解决错误 1.2.1 解决错误1 ...
2019-02-14 15:39:55
3664
原创 移植linux-4.12到JZ2440(下:启动文件系统、裁剪内核与制作补丁)
目录2. 启动文件系统、裁剪内核与制作补丁 2.1 启动文件系统 2.1.1 启动jffs2文件系统 2.1.1.1 烧写启动fs_mini.jffs2 2.1.1.2 重新配置内核支持EABI 2.1.2 启动yaffs2文件系统 2.1.2.1 修改内核使支持yaffs2文件系统 ...
2019-02-13 17:31:50
1948
原创 移植linux-4.12到JZ2440(上:uboot如何启动内核与创建单板)
目录1. uboot如何启动内核与创建单板 1.1 uboot如何启动内核 1.2 准备工作 1.2.1 环境 1.2.2 获取linux-4.12源码1.3 创建单板 1.3.1 创建JZ2440相关单板文件夹 1.3.2 测试 1.3.3 分析启动内核为什么无输出 1.3.4 解决内核无输出...
2019-02-13 15:42:08
1721
1
原创 移植u-boot-2016.11到JZ2440(七:修改源码之烧写JFFS2、烧写YAFFS与制作补丁)
目录7. 修改源码之烧写JFFS2、烧写YAFFS与制作补丁 7.1 烧写JFFS2 7.2 烧写YAFFS 7.2.1 分析nand write.yaffs 7.2.2 修改代码 7.2.2.1 添加nand操作帮助信息 7.2.2.2 添加支持nand write.yaffs操作代码 ...
2019-01-31 13:51:02
1841
原创 移植u-boot-2016.11到JZ2440(六:修改源码之环境变量、裁剪uboot与设置分区)
目录6. 修改源码之裁剪uboot、设置分区与环境变量 6.1 裁剪uboot 6.1.1 裁剪include/configs/jz2440.h文件 6.1.1.1 去掉USB支持 6.1.1.2 去掉RTC 6.1.1.3 去掉BOOTP选项 6.1.1.4 去掉部分不需要的命令行...
2019-01-30 17:06:00
2235
1
原创 移植u-boot-2016.11到JZ2440(五:修改源码之支持DM9000C网卡)
目录5. 修改源码之支持DM9000C网卡 5.1 分析网卡初始化过程 5.2 修改源码 5.2.1 修改相关宏 5.2.2 修改BANK4控制寄存器 5.2.3 修改使用dm9000网卡驱动函数 5.3 测试5. 修改源码之支持DM9000C网卡 U-Boot已经带有dm9000网卡的驱动,位于drivers...
2019-01-30 16:11:23
1347
6
原创 移植u-boot-2016.11到JZ2440(四:修改源码之识别NOR Flash与NAND Flash)
目录4. 修改源码之识别NOR Flash与NAND Flash 4.1 修改源码之识别NOR Flash 4.1.1 分析源码之NOR Flash 4.1.2 修改源码 4.1.3 测试 4.2 修改源码之识别NAND Flash 4.2.1 分析源码之NAND Flash 4.2.2 修改相关宏 ...
2019-01-29 17:20:13
2038
原创 移植u-boot-2016.11到JZ2440(三:修改源码之实现NOR启动与NAND启动)
目录3. 修改源码之实现从NOR启动与NAND启动 3.1 前言 3.2 实现从NOR启动 3.2.1 修改设置时钟 3.2.1.1 CLKDIVN寄存器 3.2.1.2 总线模式 3.2.1.3 MPLL寄存器 3.2.1.4 修改源码 3.2.2 修改初始化存储...
2019-01-28 17:31:53
2756
1
原创 移植u-boot-2016.11到JZ2440(二:分析启动流程)
目录2. 分析启动流程 2.1 u-boot.lds链接脚本 2.2 vectors.S 2.3 start.S 2.3.1 设置SVC管理模式、关看门狗、关中断、设置时钟频率 2.3.2 禁用Cache和MMU、初始化存储控制器 2.4 crt0.S 2.4.1 设置栈 2.4.2 第一阶段C函数调用 ...
2019-01-23 15:43:01
2901
原创 移植u-boot-2016.11到JZ2440(一:创建单板)
目录1. 创建单板 1.1 环境 1.2 获取u-boot-2016.11源码 1.2.1 文件夹介绍 1.2.2 文件介绍 1.3 修改源码创建单板 1.3.1 创建board/samsung/jz2440单板文件夹 1.3.2 创建configs/jz2440_defconfig单板配置文件 1.3....
2019-01-22 17:01:43
2468
原创 移植linux-3.4.2到JZ2440(下:启动文件系统、裁剪内核与制作补丁)
目录2. 启动文件系统、裁剪内核与制作补丁 2.1 启动文件系统 2.1.1 启动jffs2文件系统 2.1.1.1 烧写启动fs_mini.jffs2 2.1.1.2 重新配置内核支持EABI 2.1.2 启动yaffs2文件系统 2.1.2.1 修改内核使支持yaffs2文件系统 ...
2019-01-21 17:31:56
1022
原创 制作文件系统
目录1. 安装busybox 1.1 下载busybox-1.26.2 1.2 配置编译busybox-1.26.2 1.3 解决编译错误 1.4 安装busybox-1.26.22. 安装glibc库3. 构建目录 3.1 构建etc目录 3.2 构建dev目录 3.3 创建其他目录4. 制作映像文件 4.1 制作jffs2映像文件 ...
2019-01-19 11:55:39
1379
原创 移植linux-3.4.2到JZ2440(上:uboot如何启动内核与创建单板)
目录1. uboot如何启动内核与创建单板 1.1 uboot如何启动内核 1.2 准备工作 1.2.1 环境 1.2.2 获取linux-3.4.2源码 1.3 创建单板 1.3.1 创建JZ2440相关单板文件夹 1.3.2 测试 1.3.3 分析为什么输出乱码 1.3.4 解决乱码 ...
2019-01-17 16:26:33
1615
原创 移植u-boot-2012.04.01到JZ2440(七:修改源码之烧写JFFS2、烧写YAFFS与制作补丁)
目录 7. 修改源码之烧写JFFS2、烧写YAFFS与制作补丁 7.1 烧写JFFS2 7.2 烧写YAFFS 7.2.1 分析nand write.yaffs 7.2.2 修改代码 7.2.3 测试 7.3 制作补丁...
2019-01-17 13:48:25
792
原创 移植u-boot-2012.04.01到JZ2440(六: 修改源码之裁剪uboot、设置分区与环境变量)
目录6. 修改源码之裁剪uboot、设置分区与环境变量 6.1 裁剪uboot 6.1.1 去掉USB支持 6.1.2 去掉RTC 6.1.3 去掉BOOTP选项 6.1.4 去掉部分不需要的命令行配置 6.1.5 去掉文件系统 6.2 设置分区 6.2.1 修改源码设置分区 6....
2019-01-16 17:32:30
1152
原创 移植u-boot-2012.04.01到JZ2440(五:修改源码之支持DM9000C网卡)
目录5. 修改源码之支持DM9000C网卡 5.1 分析网卡初始化过程 5.2 修改源码 5.2.1 修改相关宏 5.2.2 修改BANK4控制寄存器 5.2.3 修改使用dm9000网卡驱动函数 5.3 测试5. 修改源码之支持DM9000C网卡 U-Boot已经带有dm9000网卡的驱动,位于driver...
2019-01-16 13:12:02
572
原创 移植u-boot-2012.04.01到JZ2440(四:修改源码之支持NOR Flash与NAND Flash)
目录4. 修改源码之识别NOR Flash与NAND Flash 4.1 修改源码之识别NOR Flash 4.1.1 打开DEBUG调试 4.1.2 分析flash_init()函数 4.1.3 分析flash_detect_legacy()函数 4.1.4 分析jedec_flash_match()函数 4.1...
2019-01-15 14:31:42
828
原创 链接地址与运行地址
1. 基本概念 链接地址: 32位的处理器,它的每一条指令是4个字节顺序存储,CPU是顺序执行的,只要没发生什么跳转,它会顺序进行执行这些指令, 编译器对代码中的变量名、函数名等东西进行一个地址的编排,赋予这些抽象的东西一个地址,然后在程序中访问这些变量名、函数名就是在访问一些地址,这些地址我们称之为编译地址。 运行地址:是指程序指令真正运行的地址,是由用户指定的,用户将运行地址烧...
2019-01-12 11:27:21
2630
原创 移植u-boot-2012.04.01到JZ2440(三:修改源码之实现NOR启动与NAND启动)
目录3. 修改源码之实现从NOR启动与NAND启动 3.1 前言 3.2 实现从NOR启动 3.2.1 修改设置时钟 3.2.1.1 CLKDIVN寄存器 3.2.1.2 总线模式 3.2.1.3 MPLL寄存器 3.2.1.4 修改源码 3.2.2 修改初始化存...
2019-01-10 14:21:13
1142
3
原创 移植u-boot-2012.04.01到JZ2440(二:分析启动流程)
目录2. 分析启动流程2.1 u-boot.lds链接脚本2.2 start.S启动文件 2.2.1 设置异常向量表 2.2.2 设置SVC管理模式、关看门狗、关中断、设置时钟频率 2.2.3 禁用Cache和MMU、初始化存储控制器 2.2.4 设置栈 2.2.5 调用第一个C函数board_init_f 2.2.6 重定位 2.2.6.1...
2019-01-05 19:07:23
889
原创 位置无关码介绍
1. 基本概念 应用程序必须经过编译、汇编和链接后才变成可执行文件,在链接时,要对所有目标文件进行地址重定位,建立符号引用规则,同时为变量、函数等分配运行地址。当程序执行时,系统必须把代码加载到链接时所指定的地址空间即链接地址(链接地址介绍在链接地址与运行地址),以保证程序在执行过程中对变量、函数等符号的正确引用,使程序正常运行。 通常情况下,将bootloader程序下载到RO...
2019-01-05 14:56:10
1173
1
原创 u-boot.lds链接文件详解
1. 格式 GNU编译器生成的目标文件缺省为elf格式,elf文件由若干段(section)组成,如不特殊指明,由C源程序生成的目标代码中包含如下段:.text(正文段)包含程序的指令代码; .data(数据段)包含固定的数据,如常量、字符串; .bss(未初始化数据段)包含未初始化的变量、数组等。 C++源程序生成的目标代码中还包括:.fini(析构函数代码); ...
2019-01-04 15:03:08
1653
原创 移植u-boot-2012.04.01到JZ2440(一:创建单板)
目录1. 创建单板 1.1 环境 1.2 获取u-boot-2012.04.01源码 1.2.1 文件夹介绍 1.2.2 文件介绍 1.3 创建单板 1.3.1 创建JZ2440相关单板文件夹 1.3.2 修改其他相关文件 1.3.3 编译1. 创建单板1.1 环境 交叉编译工具...
2019-01-03 14:55:49
1130
原创 二十三、Linux驱动之IIC驱动(基于linux4.12内核)
1. 基本概念本文默认读者掌握裸机下的I2C操作,该部分只做简单介绍, 主要内容是对linux-4.12系统下I2C驱动的分析。(上一篇二十一、Linux驱动之IIC驱动(基于linux2.6.22.6内核)对linux-2.6.22.6内核的I2C进行了分析,新内核的I2C有了很大的变化,但是也有部分类似,为了保证完整性,我会全部从头分析。linux-4.12的移植和对应之前驱动的移植以后会...
2018-12-24 16:34:19
2221
原创 二十二、Linux驱动之IIC驱动(基于linux2.6.22.6内核)
1. 基本概念本文默认读者掌握裸机下的I2C操作,该部分只做简单介绍, 主要内容是对linux-2.6.22.6系统下I2C驱动的分析。 由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据,是一个多主机的半双工通信方式,每个挂接在总线上的器件都有个唯一的地址。位速在标准模式下可达100kbit/s,在快速模式下可达400kbit/s,在高速模式下可待3.4Mbit/s。 ...
2018-12-17 17:24:19
1522
原创 二十一、Linux驱动之移植DM9000C网卡驱动(下)
通过二十、Linux驱动之移植DM9000C网卡驱动(上)对厂家提供的网卡驱动程序dm9dev9000c.c的分析,下面将该网卡驱动移植到JZ2440开发板上(内核版本为linux-2.6.22.6)。1. 硬件分析 本人使用的开发板是JZ2440,CPU为S3C2440A,与DM9000C芯片连接如下: SD0~15:16位地址、数据线,由CMD引脚决定访问类型。...
2018-12-14 13:43:03
1004
原创 二十、Linux驱动之移植DM9000C网卡驱动(上)
1. 基本概念 DM9000C是一款完全集成的和符合成本效益单芯片快速以太网MAC控制器与一般处理接口,一个10/100M自适应的PHY和4K DWORD值的SRAM。DM9000C内部还集成了接收缓冲区,可以在接收到数据的时候把数据存放到缓冲区中,链路层可以直接把数据从缓冲区取走。针对不同的处理器, 接口支持8位、 16位。 本节内容先分析DM9000厂家提供的网卡驱动程序dm...
2018-12-13 16:50:33
974
原创 十九、Linux驱动之虚拟网卡驱动
1. 基本概念 网络设备是完成用户数据包在网络媒介上发送和接收的设备,它将上层协议传递下来的数据包以特定的媒介访问控制方式进行发送,并将接收到的数据包传递给上层协议。与字符设备和块设备不同,网络设备并不对应于/dev目录下的文件,应用程序最终使用套接字完成与网络设备的接口。因而在网络设备身上并不能体现出“一切都是文件”的思想。 Linux系统对网络设备驱动定义了4个层次, 从上到...
2018-12-11 17:22:46
4247
1
原创 十八、Linux驱动之nor flash驱动
1. 基本概念 NOR FLASH是很常见的一种存储芯片,数据掉电不会丢失。NOR FLASH支持Execute On Chip,即程序可以直接在FLASH片内执行(这意味着存储在NOR FLASH上的程序不需要复制到RAM就可以直接运行)。这点和NAND FLASH不一样。因此,在嵌入式系统中,NOR FLASH很适合作为启动程序的存储介质。NOR FLASH的读取和RAM很类似(只要...
2018-12-06 17:00:13
1927
原创 十七、Linux驱动之nand flash驱动
1. 基本概念 Nand-flash存储器是flash存储器的一种,其内部采用非线性宏单元模式,为固态大容量内存的实现提供了廉价有效的解决方案。Nand-flash存储器具有容量较大,改写速度快等优点,适用于大量数据的存储,因而在业界得到了越来越广泛的应用,如嵌入式产品中包括数码相机、MP3随身听记忆卡、体积小巧的U盘等。2. 硬件分析 本人使用的是韦东山老师的JZ2440...
2018-12-05 10:48:34
2502
原创 十六、Linux驱动之块设备驱动
1. 基本概念 块设备是Linux三大设备之一,其驱动模型主要针对磁盘,Flash等存储类设备,块设备(blockdevice)是一种具有一定结构的随机存取设备,对这种设备的读写是按块(所以叫块设备)进行的,他使用缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入设备或者从设备一次性读到缓冲区。1.1 块设备结构 块设备由Page->Segment->Blo...
2018-12-04 10:15:30
1216
1
原创 十五、Linux驱动之USB鼠标驱动
1. 如何编写USB鼠标驱动 结合十四、Linux驱动之USB驱动分析中的分析,我们开始写一个USB鼠标驱动。 USB的驱动可以分为3类:SoC的USB控制器的驱动,主机端USB设备的驱动,设备上的USB Gadget驱动,通常,对于USB这种标准化的设备,内核已经将主机控制器的驱动编写好了,设备上的Gadget驱动通常只运行固件程序而不是基于Linux, 所以驱动工程师的主要...
2018-12-01 17:31:29
1448
2
原创 十四、Linux驱动之USB驱动分析
1. 基本概念1.1 简介 USB是英文"Universal Serial Bus"的缩写,意为"通用串行总线"。USB最初是为了替代许多不同的低速总线(包括并行、串行和键盘连接)而设计的,它以单一类型的总线连接各种不同的类型的设备。USB的发展已经超越了这些低速的连接方式,它现在可以支持几乎所有可以连接到PC上的设备。最新的USB规范修订了理论上高达480Mbps的高速连接。 ...
2018-11-30 16:37:33
1127
1
原创 十三、Linux驱动之触摸屏驱动
1. 基本概念 常用的触摸屏类型有两种:阻性触摸屏和容性触摸屏。阻性触摸屏是一种传感器,它将矩形区域中触摸点(X, Y)的物理位置转换为代表X坐标和Y坐标的电压。触摸屏包含上下叠合的两个透明层阻性材料,中间由一种弹性材料隔开。当触摸屏表面受到压力时,顶层和底层之间会产生触碰。所用的电阻式触摸屏都采用分压器原理来产生代表X坐标和Y坐标的电压。如下图所示,分压器是通过将两个电阻进行串联来实现...
2018-11-29 12:18:01
3909
原创 十二、Linux驱动之LCD驱动
1. 基本概念 LCD是Liquid Crystal Display的简称,也就是经常所说的液晶显示器。LCD能够支持彩色图像的显示和视频的播放,是一种非常重要的输出设备。如果我们的系统要用GUI(图形界面接口),比如minigui,MicroWindows。这时LCD设备驱动程序就应该编写成frambuffer接口,而不是编写成仅仅操作底层的LCD控制器接口。 framebuf...
2018-11-28 14:48:22
1878
原创 十一、Linux驱动之platform总线设备驱动
1. 基本概念 从Linux2.6开始Linux加入了一套驱动管理和注册机制—platform平台总线驱动模型。platform平台总线是一条虚拟总线,platform_device为相应的设备,platform_driver为相应的驱动。与传统的bus/device/driver机制相比,platform机制将设备本身的资源注册进内核,由内核统一管理,在驱动程序使用这些资源时使用统一的...
2018-11-26 16:36:04
2351
原创 十、Linux驱动之输入子系统使用
在九、Linux驱动之输入子系统分析中我们分析了输入子系统的框架,接下来我以按键模拟键盘的方式来编写输入子系统代码。1. 分析设备本人使用的是JZ2440v3开发板,该开发板CPU使用的是S3C2440A,按键与CPU连接如下: 可以看到4个按键分别连接到2440的GPF0、GPF2、GPG3、GPG11引脚上面,4个按键接上拉电阻,可知按键按下时引脚输入低电平,按键松开时引脚输...
2018-11-26 10:11:30
616
原创 九、Linux驱动之输入子系统分析
1. 基本概念 Linux系统支持的输入设备繁多,例如键盘、鼠标、触摸屏、手柄或者是一些输入设备像体感输入等等,Linux系统是如何管理如此之多的不同类型、不同原理、不同的输入信息的输入设备的呢?其实就是通过input输入子系统这套软件体系来完成的。1.1 系统整体框图1.2 输入子系统框架从整体上来说,输入子系统由驱动层(Drivers),输入子系统核心层(Input ...
2018-11-24 12:02:23
1096
原创 八、Linux驱动之阻塞与非阻塞
本节部分参考宋宝华的Linux设备驱动开发详解1. 基本概念 阻塞操作是指在执行设备操作时,若不能获得资源,则挂起进程直到满足可操作的条件后再进行操作。被挂起的进程进入睡眠状态,被从调度器的运行队列移走,直到等待的条件被满足。而非阻塞操作的进程在不能进行设备操作时,并不挂起,它要么放弃,要么不停地查询,直至可以进行操作为止。 驱动程序通常需要提供这样的能力:当应用程序进行re...
2018-11-23 14:36:52
385
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人