自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 资源 (3)
  • 收藏
  • 关注

原创 pc-lint plus扫描工具学习总结

前言:由于目前该工具比较新,网上找不到太多的可以参考的资料,这里总结一下简单的用法吧。linux下工具下载地址:[pc-lint puls 1.3.5]下载地址(https://download.csdn.net/download/zj82448191/13129935)一、前期准备1.下载工具,解压后放到linux下。2.官网申请一个三十天的许可证,需要填写邮箱。3.linux下安装python及其相关的依赖模块,可以参考手册在DOC/目录下(1)安装pythonsudo apt-get i

2020-11-20 14:50:40 181

原创 设备树学习(五)(中断的使用)

一、dts描述中断下面是一个buttons的中断的描述,描述的规则下图都有介绍,设备树中的中断描述先关的都是硬件相关的二 、驱动程序中获取软件中断号设备树中的buttons节点将会转化为一个platform_device结构体,我们可以使用platform_get_resource()函数来获取软件中断号,然后使用该中断号申请注册一个中断程序。...

2020-11-02 17:50:53 14

原创 input输入子系统

文章目录前言一、输入子系统的作用二、输入子系统框架分析1.输入子系统架构图2.输入子系统分析2.1 核心层分析2.2 事件层分析2.3 input device driver层分析3. input事件分析三、按键驱动实例总结前言本文仅作为学习笔记总结提示:以下是本篇文章正文内容,下面案例可供参考一、输入子系统的作用兼容所有输入设备——Linux系统支持的输入设备繁多,例如键盘、鼠标、触摸屏、手柄或者是一些输入设备像体感输入等等,Linux系统为了管理如此之多的不同类型、不同原理、不同的输入信

2020-10-28 18:28:19 24

原创 设备树学习(四)(uboot对设备树的支持)

一、uboot怎么传入设备树到内核这个比较简单,我们知道在启动内核的时候,需要把设备树的地址写到R2寄存器中,但是怎么写到R2寄存器?a. u-boot中内核启动命令:bootm <uImage_addr> // 无设备树,bootm 0x30007FC0bootm <uImage_addr> <initrd_addr> <dtb_addr> // 有设备树比如 :nand read.jff

2020-10-21 18:07:22 60

原创 设备树学习(三)(内核对设备树的处理,重要部分)

前言:这篇文章主要分析内核对设备树的处理,即怎么生成了最后的设备节点。**Linux uses DT data for three major purposes:platform identification, 平台识别信息runtime configuration, and 运行时配置信息device population. 设备信息**一、head.S对设备树文件的简单处理bootloader启动内核时,会设置r0,r1,r2三个寄存器,r0一般设置为0;r1一般设置为machine

2020-10-21 16:44:54 88

原创 设备树学习(二)(设备树的规范)

前言:本章介绍.dts与.dtb文件规范一、dts文件解析1.1 dts文件布局/dts-v1/;[memory reservations] // 格式为: /memreserve/ <address> <length>;/ { model = "xxx"; compatible = "xxx"; #address-cells = <x>; #size-cells = <x>; [property definitions]

2020-10-20 17:22:54 75

原创 设备树学习(一)( 设备树的引入)

前言:设备树在目前驱动的开发中起着非常重要的作用,需要透彻了解,所以这里写篇文章,用来记录学习过程。1、设备树的引入1.1 字符设备驱动的三种写法(1)传统的写法一开始学习驱动的时候,要写一个LED的驱动程序,一般都会使用最传统的方法来写,即只有一个led_drv.c程序,该程序里面在file_ops结构体中的open函数中,我们会配置LED所对应的引脚为输出引脚,然后会在write函数中对引脚的高低电平做改变,但是这样的话,如果我们还有一个其他的设备,里面也有一个LED灯需要一个驱动程序的话,由于

2020-10-20 09:52:28 78

原创 驱动学习之时间管理

一、jiffies1.1概念 通常情况下,jiffies在linux系统启动引导阶段初始化为0,当系统完成了对时钟中断的初始化之后,在每个时钟中断处理例程中,该值都会被+1,因此该值存储了系统自最近一次启动以来的时钟滴答数。除了时钟中断程序对该值有修改的权利,其它任何模块都只有读的权利。这里再介绍一个概念HZ,该值在内核源码根目录下.config文件中。一般为1000,代表系统一秒中发生1000次时钟中断。jiffies在内核源码中作为一个全局性变量被导出,所以在驱动程序中如过想使用,必须包含头文

2020-09-21 14:22:54 18

原创 驱动学习之延时机制(tasklet与工作队列)

前言:最近接触到了工作队列,不知道为什么要用它,大概学习一下一、工作队列的引入我们都知道中断分为顶半部与底半部,顶半部完成的都是比较着急的硬件的操作,完成之后要迅速清除中断,然后由底半部执行那些推后的工作,我们经常使用tasklet...

2020-09-18 18:28:16 60

原创 驱动学习之中断

前言:我们知道外部设备与处理器交互的一般手段有两种–中断与轮询。但是由于轮询是比较消耗CPU资源的,所以现代设备大多数都采用中断与处理器通信。处理器在中断到达时候会根据中断号找到对应的处理函数对该信号进行处理。这些处理函数我们成为中断处理例程,设备驱动程序负责为设备提供相应的中断处理例程,并注册到系统。从设备发出中断信号,到处理器最终调用处理例程处理完成。期间会经过很多步骤,这个过程构成了中断处理框架,本文将描述linux系统下的中断处理设计框架,然后讨论驱动程序如何利用接口注册中断处理例程。一、中断架

2020-09-18 13:31:21 21

原创 驱动学习之同步IO

前言:本文讨论驱动程序中同步IO类型一、同步阻塞IO同步阻塞IO是驱动中最常用到的,这里我们分析一下他的实现。等待队列是内核中实现阻塞IO经常使用的办法,我们这里分析一下等待队列的机制。1等待队列这里先介绍两个结构体,等待队列头部及节点:内核实现了自动实现阻塞的接口,如下:1.定义等待队列头wait_queue_head_t wq; //定义等待队列头init_waitqueue_head(&wq) //等待队列头的初始化2.实现阻塞wait_event(wq, con

2020-09-16 15:00:20 11

原创 驱动学习之互斥与同步

一、并发的来源中断处理路径调度器的可抢占性多处理器的并发执行二、解决竟态的办法2.1 中断屏蔽对于单cpu范围来说,解决竟态的简单方法就是屏蔽系统的中断,屏蔽中断使得中断与进程之间的并发不会发生,并且由于Linux内核进程调度等操作都是依赖于中断来实现,内核抢占之间的并发也就可以避免了。local _ irq _ disable() //屏蔽中local _ irq _ enable() //开中断下面这两个宏是上面的变体,目的是为了防止在关闭中断的环境中使用上面两个宏之后,最后的环

2020-09-16 08:51:01 26

原创 Linux内核内存分配接口函数分析

前言:这里来分析一下Linux内核内存分配的原理1、物理内存的管理先来简单了解几个概念1.1 内存节点 node在计算机世界中,有两种物理内存的管理方式被广泛使用,他们分别是:UMA(一直内存访问)模型NUMA(非一致内存访问)模型两种模型的区别如下:在linux源码中以struct pglist_data数据结构来表示单个的内存节点,对于NUMA模型,多个内存节点通过链表链接起来,对于UMA模型,因为只有一个这种node,所以不存在链表。1.2 内存区域ZONE内存区域属于单个内存节

2020-09-14 11:34:15 69 1

原创 字符设备驱动原理分析

前言:开始学习字符设备驱动,这里会配合对内核的了解来学习学习字符设备前,先了解一个结构体:struct file_operations可以看到该结构体中都是一些函数指针变量,这些函数变量这里不做介绍,我们只需要知道现实中驱动的编写多是围绕着这些函数的实现来进行的。学习字符设备驱动,要先了解字符设备结构体,内核使用cdev结构体来描述一个字符设备。 struct cdev { struct kobject kobj; /* 内嵌的 kobject 对象 */ struct module *ow

2020-09-11 11:42:59 35

原创 内核中打印信息学习

在 Linux 中,内核打印语句 printk()会将内核信息输出到内核信息缓冲区中。内核信息缓冲区是一个环形缓冲区(ring buffer),因此,如果塞入的消息过多,就会将之前的消息冲刷掉。Linux 的 klogd 进程(一个系统守护进程,它截获并且记录下 Linux 内核日志信息)会通过/proc/kmsg 文件读取缓冲区,一旦读取完成,内核信息便从缓冲区中被删除。之后,klogd 守护进程会将读取的内核信息派发给 syslogd 守护进程(syslogd 记录下系统里所有提供日志记录的

2020-09-10 15:15:27 85

原创 内核模块加载过程分析

前言:想要了解内核模块的加载过程,需要先了解ELF文件格式,我的ELF文件格式解析文章地址如下:ELF文件格式解析https://blog.csdn.net/zj82448191/article/details/108441447在用户空间,用insmod这样的命令来向内核空间安装一个内核模块,本章将详细讨论模块加载时的内核行为,当我们加载一个模块时,insmod会首先利用文件系统的接口将其数据读取到用户空间的一段内存中,然后通过系统调用sys_init_module,让内核去处理加载的整个过程。一、

2020-09-10 14:22:25 194

原创 Linux内核经典链表list_head常用方法总结

前言:一起分析内核最重要的链表list_head一、链表结构struct list_head { struct list_head *next, *prev;};二、链表初始化函数list_head 链表的初始化只是把 *next, *prev连个指针指向链表头,形成双向循环链表;#define LIST_HEAD_INIT(name) { &(name), &(name) } #define LIST_HEAD(name) \ struct list_head nam

2020-09-09 10:05:03 77

原创 ELF文件格式解析

前言:为了更好的学习驱动,这里打算了解一下内核模块实现机制,融汇贯通一下,可能会遇到很多之前没有接触的东西一、LINUX驱动学习之常用的模块操作命令(1)lsmod(list module,将模块列表显示),功能是打印出当前内核中已经安装的模块列表(2)insmod(install module,安装模块),功能是向当前内核中去安装一个模块,用法是insmod xxx.ko(3)modinfo(module information,模块信息),功能是打印出一个内核模块的自带信息。,用法是modinf

2020-09-07 17:36:46 143

原创 Linux内核模块编译方法

一、分类静态编译:静态编译即为将驱动直接编译进内核 调试完之后,采用该方法动态编译:动态编译即为将驱动编译成模块二、动态编译这里提供一个Makefile,动态编译区分单文件与多问见,详细见Makefile内容:#obj-m = demo.o 单文件obj-m = demo.odemo-objs = 1.o 2.o 3.o PWD := $(shell pwd)KDIR:=/lib/modules/$(shell uname -r)/build/ all: m

2020-09-04 16:27:19 156

原创 Linux内核模块作用及组成

前言:Linux 设备驱动会以内核模块的形式出现,因此,学会编写 Linux 内核模块编程 是学习 Linux 设备驱动的先决条件一、模块的作用Linux 内核的整体结构非常庞大,其包含的组件也非常多,如果把所有需要的功能都编译到Linux内核,这会导致两个问题,一是生成的内核会很大,二是如果我们要在现有的内核中新增或删除功能,将不得不重新编译内核。所以引入了模块,模块可以随意添加到内核中或者从内核中卸载掉,模块特点如下:1.模块本身不被编译入内核映像,从而控制了内核的大小。2.模块一旦被加载,

2020-09-04 11:08:56 119

原创 移植uboot-2012.04.01到JZ2440(九,制作补丁)

一、目的补丁文件就是通过对比当前文件和源码文件之后,得到修改内容的文件。有了补丁文件,就可以在uboot2012.04的源码之上,直接打补丁,就会变为移植好适配JZ2440的uboot,非常方便,在分享或者发布的时候,因为Uboot源码是统一的,所以只需要分享或者发布这个补丁文件即可。二、如何制作补丁1清除编译产生文件make distclean2 对文件夹重命名mv u-boot-2012.04.01 u-boot-2012.04.01-jz24403 重新解压uboot2012.04.

2020-09-03 15:29:30 20

原创 移植uboot-2012.04.01到JZ2440(八,烧写内核与文件系统)

一、烧写内核在上一篇文章中设置了默认内核启动参数和命令,如图:启动时内核先会进行倒数计时,如果没有操作,就会执行图中的命令,从nand flash中的kernel 分区处读取内核到内存中的0x30000000处,也就是SDRAM起始地址,然后从0x30000000处启动内核。所以,我们只需要将JZ2440官方提供的内核文件复制到TFTP服务器目录,然后将该内核文件提前烧写到nand flash的kernel分区即可,烧写方法如下:tftp 30000000 uImage_4.3nand eras

2020-09-03 15:13:02 16

原创 移植uboot-2012.04.01到JZ2440(七,设置默认环境变量)

一、定位问题目前移植的uboot支持SDRAM、Nor Flash、Nand Flash、DM9000网卡,但是还有一行警告没有处理:通过搜索这行日志内容找到所在位置:该函数中主要使用的 default_environment 数组,接着查看该数组内容,同样定义在该文件中,该数组的功能是根据我们定义的宏定义来设置默认环境变量参数。二、设置默认参数在单板配置文件include/configs/smdk2440.h中配置这些相关宏定义:2.1. 内核启动相关编译,下载到开发板,查看串口输出

2020-09-03 14:07:50 25

原创 移植uboot-2012.04.01到JZ2440(六 设置mtd分区表)

前言:这节继续移植uboot,让它支持mtd分区一、mtd分区规划及其作用uboot支持各种设备之后,接下来的工作就是烧写内核、烧写文件系统,所以需要对整块Nand Flash的空间作以规划,大致分为以下四个空间即可:bootloader空间内核参数空间内核空间文件系统空间但是目前我们仅知道uboot.bin被裁剪到了217KB,而不知道其它三个空间的信息,而且是第一次移植,对内核参数占用空间、内核空间的大小没有概念,所以我们需要借助别人已经制作好的内核和文件系统来查看这个信息。启动JZ24

2020-08-26 17:49:09 70

原创 移植uboot-2012-04.01到JZ2440(五 uboot裁剪)

前言:目前移植修改后的uboot327K,这里我们稍微进行裁剪1.裁剪方法裁剪的方法就是去掉单板配置文件include/configs/smdk2440.h中不想编译的宏。2.去掉usb部分3.去掉RTC支持4.去掉BOOTP、DHCP、DATE、USB支持5.去掉文件系统支持6.重新编译make distcleanmake smdk2440_configmake下载到开发板中,在串口终端中看看是否可以正常启动:...

2020-08-20 09:24:57 37

原创 移植uboot-2012.04.01到JZ2440(四)

前言:DM9000C网卡移植1.添加uboot中网卡的驱动到工程中由于uboot已经有支持DM9000C的网卡驱动,所以我么这里先把驱动添加到makefile中。从上面makefile可以看到,只要添加了CONFIG_DRIVER_DM9000这个宏,就能把改驱动增加进去,所以我们先去添加这个宏,我们先全局搜一下这个宏,看看还需要定义哪些相关的东西。找到别人使用该网卡定义的宏,我们这里也这样定义2.修改宏定义首先修改基地址,根据原理图我们知道,在2440上网卡是在back4区域,所以基地址

2020-08-19 17:42:38 33

原创 移植uboot-2012.04.01到JZ2440(三)

前言:这节我们来修改nand flash相关的代码,参考逻裸机操作第十一课JZ2440裸板开发发之Nand flash1.定位问题我们去掉之前屏蔽的nand的宏,如下:然后编译,错误如下:根据报错,我们定位到地方:nand这个指针有问题,初始化如下:接下来问题就变为struct s3c2410_nand这个结构体定义有问题,继续寻找该定义,果然,在文件arch/arm/include/asm/arch-s3c24x0/s3c24x0.h中,我们定义的是CONFIG_S3C2440,所以

2020-08-19 14:39:03 27

原创 移植uboot-2012.04.01到JZ2440(二)

前言:这节课我们解决nor flash的问题,需要了解nor flash的操作,这里参考之前的nor flash裸板操作:第十课JZ2440裸板开发之nor flash1.错误代码定位上节课修改的代码烧写后,串口信息如下,我们来定位flash的报错定位。全局搜索Flash,发现很多,不好找,我们沿着uboot的启动流程去找,发现就在第二阶段的board_init_r()函数中。我们来分析这段代码:#if !defined(CONFIG_SYS_NO_FLASH) puts("Flash: ")

2020-08-18 13:35:34 30

原创 移植uboot-2012.04.01到JZ2440(一)

前言:在移植之前,请熟悉JZ2440的裸板操作及uboot的编译配置及启动过程1.新建单板我们这里下载uboot-2012.04.01,然后解压,进入目录:tar -jxvf u-boot-2012.04.01.tar.bz2cd u-boot-2012.04.01我们基于2410来移植,所以接下来先创建相关的单板文件:(1)首先在board/samsung创建一个smdk2440的目录 cd u-boot-2012.04.01/board/samsung cp smdk2410/ s

2020-08-17 17:18:43 51

原创 第十二课JZ2440裸板开发之I2C

一、I2C基本知识1、iiciic的实质是串口通信的一种方式。IIC 即Inter-Integrated Circuit(集成电路总线) I2C总线是PHLIPS公司推出的一种串行总线,I2C总线只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。2、物理接口(1)SCL(serial clock):时钟线,传输CLK信号,一般是I2C主设备向从设备提供时钟的通道。(2)SDA(serial data): 数据线,通信数据都通过SDA线传输3、通讯特征(1)串口通讯数据传输以字节为

2020-08-17 09:35:43 39

原创 第十一课JZ2440裸板开发发之Nand flash

一、NAND FLASH介绍1.1、原理图1.2 引脚功能介绍上节课我们介绍了nor flash与 nand flash的区别,这里不再继续介绍,这里主要介绍一下该开发板的NAND FLASH。我们先介绍一下所有的引脚。(1)我们可以看到,原理图中只有IO数据线,我们知道操作内存类接口的一般方式都是发命令、地址、数据,这里命令跟地址怎么发送呢?其实也是通过IO发送,只不过需要ALE、CLE的配合使用。引脚作用IO传输数据、地址、命令ALEALE高电平时,若CLE为低

2020-08-12 13:42:54 29

原创 第十课JZ2440裸板开发之nor flash

一、flash介绍常用的Flash类型有Nor Flash和NAND Flash两种,区别大致如下:Flash存储器件由擦除单元(也称为块)组成,当要写某个块时,需要确保这个块己经被擦除。Nor Flash的块大小范围为64kB、128kB:NAND Flash的块大小范围为8kB,64kB,擦/写一个Nor Flash块需4s,而擦/写一个NAND Flash块仅需2ms。Nor Flash的块太大,不仅增加了擦写时间,对于给定的写操作,Nor Flash也需要更多的擦除操作——特别是小文件,比如一

2020-08-11 16:27:09 47

原创 第九课JZ2440裸板操作之重定位

前言,这节课会涉及到重定位、位置无关码,不是很了解的请先看我的这篇文章:链接地址、运行地址、加载地址、存储地址、位置相关与位置无关一、重定位引入首先我们知道我们的代码是烧写在flash中的,而且我们的设备是区分nor flash与nand flash;nor启动:如果我们使用nor启动,这时nor flash就会被映射成0地址,但是由于nor flash特性,我们不能按照SDRAM对nor flash进行写操作,所以需要将全局变量及静态变量放到SDRAM中。nand启动:如果我们使用nand启

2020-08-11 16:26:26 28

原创 第八课JZ2440裸板开发之SDRAM

一、SDRAM介绍JZ2440上使用的SDRAM如下:JZ2440开发板上使用的是EtronTech公司的EM63A165TSSDRAM芯片,该芯片是一个16M x 16 bit Synchronous DRAM (SDRAM)的芯片,就是说共有16M存储单元,每个存储单元的数据宽度是16bit,即整个芯片大小是32MB。我们的开发板由两个16位的SDRAM组成一个32位的SDRAN,大小为64M,我们也可以计算出来,使用到的地址线是0-14 一共15根,所以每个SDRAM的大小就是2^15=3276

2020-08-11 08:45:19 32

原创 第七课JZ2440裸板开发之内存控制器

一、内存控制器1.1s3c2440内存控制器介绍如图是2440的片上系统,有GPIO控制器(接有GPIO管脚),有串口控制器 (接有TXD RXD引脚)。对于cpu来说,他只管发出地址信息,至于这个地址是哪里的,这是由内存控制器进行选择的,内存控制器会根据不同的地址选择不同的模块,然后跟这些模块进行通信。如图,SDRAM、DM9000网卡、Nor Flash都接在JZ2440的数据总线和地址总线上,CPU把数据和地址发送出去,然后内存控制器根据片选信号选择相应的设备接收地址和数据信号,互不干扰。

2020-08-10 21:34:27 21

原创 第六课JZ2440裸板开发之UART

一、协议简介1.1原理图UART的全称是Universal Asynchronous Receiver and Transmitter,即异步发送和接收。原理图如下:通过TxD->RxD把ARM开发板要发送的信息发送给PC机。通过RxD->TxD线把PC机要发送的信息发送给ARM开发板。最下面的地线统一参考地。1.2 参数波特率:一般选波特率都会有9600,19200,115200等选项。其实意思就是每秒传输这么多个比特位数(bit)。起始位:先发出一个逻辑”0”的信号,表示

2020-08-10 21:34:02 39

原创 第五课jz2440裸板开发之时钟体系

一、芯片手册及原理图1.芯片手册1.1时钟体系介绍S3C2440是System On Chip(SOC),在芯片上不仅仅有CPU还有一堆外设。至于有哪些外设,可以查看参考手册。在S3C2440参考手册的第一章PRODUCT OVERVIEW里面有个BLOCK DIAGRAM图:AHB BUS,H即为High,高速之意,工作于HCLK;下面的是一些对性能要求不那么高的低速设备,在APB BUS,P即为Peripheral之意,工作在PCLK。在参考手册的特性里介绍了S3C2440的工作频率,Fc

2020-08-10 09:18:15 61 2

原创 第四课jz2400裸板开发之按键

一、原理图及芯片手册分析开发板一共有四个按键 s2 s3 s4 s5,我们今天使用s2来进行开发测试。1.原理图分析由原理图可以看到,三个EINT0标号相连,按键未按下时,GFP0引脚外接3.3V,为高电平,当按键按下后,与地相连,为低电平。所以我么你可以设置GFP0引脚为输入模式,通过读取GPF0引脚的电平来判断按键是否按下,当为低电平的时候,表示按键按下。2.分析芯片手册我们打开芯片手册,找到GPF0引脚如图:看芯片手册知道我们要设置GPFCON寄存器[1:0]位为00,由于这里默认

2020-08-06 21:47:05 39

原创 第三课jz2440裸板开发之点亮led灯

一、原理图及芯片手册分析1.1 原理图部分我们这里打算点亮LED灯,所以先查看了原理图,找到LED部分:从原理图中可以看到,led灯一边接着一个3.3V的电源,另一边接着GPIO口,如下所示:LED1对应GPF4LED2对应GPF5LED4对应GPF6所以我们响点亮led灯,就需要设置GPF4、GPF5、GPF6这三个引脚为输出模式,当输出高电平的时候,三极管不同,灯灭,当输出低电平的时候,三极管导通,灯亮。1.2 芯片手册部分这里我们打开S3C2440芯片手册(芯片手册及原理图下载地

2020-08-05 21:54:12 61

原创 第二课JZ2440裸板开发之编译环境搭建

前言:本文用到的交叉编译器的下载地址如下:arm-linux-gcc-4.3.2下载地址这里搭建编译环境,我使用的是虚拟机,所以需要在虚拟机中安装交叉编译器,然后配置一下相关的文件,具体步骤如下:第一步:下载并解压交叉编译器第二步:使用vim ~/.bashrc,然后在最后添加环境变量PATH的值,PATH值修改如下:...

2020-08-05 21:50:47 42

PC-lint puls扫描工具

这里是linux下使用的工具,具体的使用方法我会总结一篇文章,如果不太会用的话可以找到我的文章参看一下。我也是摸索的前进,但是这个工具需要从官网填写邮箱申请一个三十天的许可证

2020-11-20

交叉编译工具链.zip

这个里面有两个压缩包及一个说明,主要是我我文章中介绍的JZ2400编译环境搭建的时候用到的。

2020-08-05

jz2440V3原理图及s3c2440芯片手册.zip

这里是jz2440-v3开发板原理图及S3C2440芯片手册,是购买JZ2440开发板的时候带的,这里上传文件,主要是希望配合我的jz2440裸板操作文章,另外赚点积分

2020-08-04

空空如也

空空如也

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

TA关注的人 TA的粉丝

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