
笔记-嵌入式-Linux韦东山
文章平均质量分 62
张勇1234
这个作者很懒,什么都没留下…
展开
-
U-Boot移植需要修改的文件
在S3C2410的基础上移植,使其支持S3C2440。在NOR Flash中保存U-Boot,在NAND Flash中保存内核和文件系统。可以使用U-Boot烧写内核、文件系统到SDRAM。 1、复制board/smdk2410目录->board/100ask24x0目录;把该目录下 smdk2410.c改为100ask24x0.c2、修改board/100ask24x0/Makefile C原创 2017-07-20 17:07:13 · 647 阅读 · 0 评论 -
ARM内连汇编_asm_
在针对ARM体系结构的编程中,一般很难直接使用C语言产生操作协处理器的相关代码,因此使用汇编语言来实现就成为了唯一的选择。但如果完全通过汇编代码实现,又会过于复杂、难以调试。因此,c语言内嵌汇编的方式倒是一个不错的选择。然而,使用内联汇编的一个主要问题是,内联汇编的语法格式与使用的编译器直接相关,也就是说,使用不同的C编译器内联汇编代码时,它们的写法是各不相同的。下面介绍在ARM体系结构下GCC的内转载 2017-08-13 12:33:22 · 9419 阅读 · 0 评论 -
UART、I2C、SPI通信协议
UART UART:通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),是一种异步收发传输器。它将要传输的资料在串行通信与并行通信之间加以转换。串型表示一个时钟只能发送一位,异步代表收发方没有同步的时钟信号,每传送一个数据都要加上表示数据开始和结束的额外信息。所以UART发送速率和效率都较低。有时为了增强数据抗干扰能力、长距离传输。需要原创 2017-07-16 16:07:50 · 1964 阅读 · 0 评论 -
触摸屏原理
电阻式触摸屏电阻式触摸屏将矩形区域中触摸点(X,Y)的物理位置转换为代表X坐标和Y坐标的电压。然后经过ADC转换把采样到的模拟电压信号转换成数字信号存放于某个寄存器中供后续处理。 电阻屏的主要结构为:薄膜+玻璃,中间有绝缘支点。前者可以经过触摸弯曲,后者不会。然后在两层上涂有ITO,ITO是一种材料,其实是一种涂料,特点就是透明、导电、均匀涂抹。中间绝缘物质对其隔离为4 线、5线的网格状。原创 2017-07-16 15:39:51 · 2760 阅读 · 0 评论 -
LCD和图像数据结构
LCD显示器的种类:STN(超扭曲向列),TFT(薄膜晶体管),LTPS TFT(低温多晶硅TFT),OLED(有机发光二极管)。STN:最低端,功耗低,色彩、亮度弱,响应时间200ms,动画有明显拖影。 TFT:相应时间小于80ms,各相性能完全超过STN,功耗较高。是目前的主流。 LTPS:TFT衍生出的新一代产品,各相指标超过TFT,响应时间12ms,制造技术要求高,部分大厂可以生产。原创 2017-07-16 10:51:57 · 757 阅读 · 0 评论 -
时钟系统
晶振是系统工作的原始激励,一般的芯片都可以通过外部引脚选择使用外部晶振还是内部晶振。内部晶振容易受到芯片内部热干扰,所以一般的芯片还是会选择在外接晶振。 但是,受电磁干扰,板间布线的限制。晶振频率不能选得太高。所以需要时钟控制逻辑的PLL提高系统时钟。一般的系统都会使用MPLL和UPLL这两个PLL。其中UPLL专门用于USB设备。而MPLL以不同的倍频系数产生FCLK给CPU核,HCLK给AHB原创 2017-07-15 17:05:56 · 586 阅读 · 0 评论 -
ARM中断体系结构-结合软硬件分析
先概述下中断发生时的软硬件处理流程。 硬件:中断源->中断控制器筛选->CPU核保存当前工作状态,跳到对应异常向量表 软件:根据中断号,执行对应中断服务程序,执行完毕恢复各类寄存器值,并返回。AREA INT, CODE, READONLY IMPORT RST_DOENTRY b原创 2017-07-15 14:19:16 · 618 阅读 · 0 评论 -
NOR Flash,NAND Flash和SDRAM-嵌入式存储器
一般嵌入式系统中会用到NOR Flash,NAND Flash和SDRAM三内存储器。这三者分别对应PC机存放BIOS的ROM,硬盘和内存。NOR Flash容量较小一般存放开机启动时的初始化程序。它的接口和SDRAM一样,CPU能够在NOR Flash上直接执行代码。而NAND Flash容量较大,CPU不能在NAND Flash上直接执行代码,访问NAND Flash需要完成一些初始化操作。NA原创 2017-07-14 09:50:44 · 2112 阅读 · 0 评论 -
MMU内存管理单元(2)-访问权限控制
内存访问权限由CP15的C3寄存器(域访问控制),描述符的域(Domain),描述符AP位和CP15的C1寄存器的R/S/A位联合控制。一级描述符 二级描述符 MMU把内存空间分成16块,CP15的C3寄存器每两位控制一个域。一级描述符的Domain=0000-1111代表这1MB空间属于域0-15 00 无访问权限原创 2017-07-13 15:45:06 · 1538 阅读 · 0 评论 -
MMU内存管理单元(1)-虚拟地址到物理地址转换
MMU的主要作用:虚拟地址到物理地址的转换;访问权限控制;设置虚拟存储空间的缓冲。 虚拟存储器:程序一般存于掉电不丢失的硬盘中,但是硬盘读写速度慢。所以系统上电后一般只在ROM中完成小部分硬件初始化程序,并把程序搬运到内存中。然后,从内存中开始执行程序。但是,内存有限,不能一次性把所有代码加载到内存中,所以只把当前用到的一部分代码加载过来,把没用到的搬回磁盘。此时的效果等同于把所有程序加载到原创 2017-07-13 12:22:46 · 4970 阅读 · 0 评论 -
MMU内存管理单元(3)-系统控制协处理器CP15
CP15是用于ARM存储管理的系统控制协处理器,并非CPU核外部件。它属于MMU(存储管理单元的)的一部分,起控制作用。CP15有16个32位寄存器c0-c15。和ARM核类似有些寄存器存在影子寄存器,即名称相同但是在不同模式下表示不同的寄存器。CP15指令中指定特定的标志位来区分这些寄存器。MCR:把ARM处理器寄存器内容传到CP15寄存器中MRC:把CP15寄存器内容传到ARM寄存器中MC原创 2017-07-12 16:08:45 · 715 阅读 · 0 评论 -
软硬件之间的桥梁-指令集
指令以“ 1010…… ”二进制方式存放在存储器中,体现形式由原来的数据变为电学信号。CPU 从存储器中取指令,实际上是查看存储器输出的电学信号,“1010…… ”变成了高低电平。后续的指令执行是硬件电平信号在传输和运算(数字电路)。 指令集即一个处理器的架构,CPU执行不同的操作需要不同的指令,如存储器访问:Load/Store,Swap;数据处理:CPU内部寄存器读写,算术运算,逻辑运原创 2017-07-12 11:40:20 · 1656 阅读 · 0 评论 -
嵌入式代码的编译、下载、执行
从我们学习C语言开始,是基于PC系统的IDE(集成开发环境VC)编写代码。而那时的代码编写只是停留在抽象逻辑层面,我们并不能体会如:printf(“”Hello World!\n“”)具体是如何实现的。后来学习单片机,单片机虽然性能较弱,却是个很完整的系统。普遍使用的IDE集成了很多功能,包括工程管理,代码处理等。再加上单片机厂商提供了全面的库函数。所以初学者被屏蔽在底层软硬件之上,更加不能理解整原创 2017-07-12 08:51:26 · 2082 阅读 · 0 评论 -
嵌入式软硬件协作简单例子分析
一个典型的SOC架构有CPU、总线、存储器、外设。CPU负责指令的取指、译码、执行;总线给每个CPU外围设备指定一些地址,包括存储器和一些其他设备。CPU通过这些地址开始的一些寄存器来控制这些硬件。以S3C2440为例,从0x0000_0000-0x4000_000对应存储器空间,它被分成8个bank,每个bank对应一类存储器或者和存储器接口类似的器件。0x4800_0000-0x4800_原创 2017-07-11 09:14:55 · 1055 阅读 · 0 评论 -
Linux下串口、网卡驱动
一、串口 1、一台有输入、显示部件,然后能够连接的计算机的设备叫做终端。Linux中用tty表示终端。控制台和终端相比只是多了一项功能,它可以显示系统信息,比如内核消息、后台服务消息。启动Linux内核前传入的命令行参数“console=…”就是用来指定控制台。2、串口也是一种终端设备,在基本硬件操作的基础上,还增加了很多软件功能。驱动程序从上到下分为四层:终端设备层、行规层、串口抽象层、串口芯片原创 2017-09-02 17:02:36 · 972 阅读 · 0 评论 -
Linux中断体系结构
一、linux 异常结构 1、start_kernel 会调用trap_init 和init_IRQ设置异常处理函数 2、trap_init (位于arch/arm/kernel/traps.c中),linux异常向量表位于0xffff_0000,异常处理程序位于0xffff_0000+0x200(一级处理)void __init trap_init(void){ unsigned l原创 2017-08-27 14:46:32 · 628 阅读 · 0 评论 -
Linux 内核编译
1、下载内核,解压 tar -xjvf linux-2.6.22.62、进入内核根目录,打补丁 cd linux-2.6.22.6 patch -p1 < ../linux-2.6.22.6_jz2440.patch3、配置 a、直接make menuconfig(时间久)b、使用默认配置(先针对具体架构配置) cd arch/arm/configs make s3c2410_defco原创 2017-07-27 21:51:40 · 338 阅读 · 0 评论 -
U-Boot启动过程源码分析(1)-第一阶段
Bootloader介绍 Bootloader是在操作系统运行之前执行的一小段程序,通过这一小段程序,我们可以初始化硬件设备、建立内存空间的映射表,从而建立适当的系统软硬件环境,为最终调用操作系统内核做好准备。PC机中的引导加载程序是由BIOS和位于硬盘MBR中的OS Boot Loader(比如LILO和GRUB等)一起组成的,BIOS在完成硬件检测和资源分配后,将硬盘MBR中的Boot Lo原创 2017-07-17 14:24:16 · 862 阅读 · 0 评论 -
U_BOOT_CMD命令解析
在UBOOT当中,各个命令是通过U_BOOT_CMD这个宏来定义出来的。先来看UBOOT当中关于U_BOOT_CMD这个宏的定义:#define Struct_Section __attribute__ ((unused,section(“.u_boot_cmd”)))由此可见,被U_BOOT_CMD 定义过的结构体,最终回被放到一个u_boot_cmd段中。可以通过readef 工具进行转载 2017-07-19 16:33:57 · 1385 阅读 · 0 评论 -
U-Boot启动过程源码分析(3)-启动Linux
U-Boot启动Linux过程 U-Boot使用标记列表(tagged list)的方式向Linux传递参数。标记的数据结构式是tag,在U-Boot源代码目录include/asm-arm/setup.h中定义如下:struct tag_header { u32 size; /* 表示tag数据结构的联合u实质存放的数据的大小*/ u32 t原创 2017-07-17 16:28:05 · 538 阅读 · 0 评论 -
U-Boot启动过程源码分析(2)-第二阶段
第二阶段start_armboot函数需要用到include/asm-arm/global_data.h中结构体gd_t; include/asm-arm.u/u-boot.h中结构体bd_t。gd_t,bd_t结构体中的信息来设置标记列表,U-Boot启动内核时给内核传递参数。逐个调用init_sequence数组中的初始化函数。最后执行 common/main.c中的 main_loop函数原创 2017-07-17 16:15:00 · 579 阅读 · 0 评论 -
u-boot 编译改动了那些文件(1)make xxx_config
编译过程:两条命令就够,分析每条命令都干了什么原创 2017-07-17 19:57:24 · 347 阅读 · 0 评论 -
u-boot 编译改动了那些文件(2)-make all
先汇总编译用到的文件: 顶层的Makefile、mkconfig; include/config.mk(指定架构、CPU核、soc),lib_arm/config.mk(指定交叉编译工具),board/smdk2410/u-boot.lds(U-Boot的连接脚本), board/smdk2410/config.mk(代码段连接的起始地址)cpu/arm920t/config.mk(设定了跟a原创 2017-07-19 11:25:53 · 473 阅读 · 0 评论 -
Linux内核引导代码分析
1、内核第一个执行的文件:linux/arch/arm/kernel/head.S 主要调用__lookup_processor_type和__lookup_machine_type判断当前内核是否支持CPU和开发板。id由U-Boot传过来,之后再进行创建页表等一些工作。创建页表之后才使用虚拟地址。最后跳到init/main.c中的secondary_start_kernelENTRY(stex原创 2017-08-13 16:49:10 · 623 阅读 · 0 评论 -
U-boot命令执行过程和添加命令的方法
分析U-boot代码会发现主要分为两部分:1、启动内核(倒计时完成前无空格按下),s=getenv(“bootcmd”)run_command2、进入u-boot界面readline读入串口的数据run_command3、可见u-boot的核心即命令。命令源代码通常放在common目录下。 定义命令 U_BOOT_CMD(name,maxargs,rep,cmd,usage,help)各原创 2017-07-25 21:15:35 · 644 阅读 · 0 评论 -
Linux最小根文件系统
1、类似windows下的C、D等盘,Linux也会把磁盘、Flash化分成若干个分区。和C盘一样在某个分区中存放系统启动必须的文件,如内核镜像文件(一般单独存放在一个分区中),内核启动后运行的第一个程序init、给用户提供界面的shell程序、应用程序依赖的库。这些必需、基本的文件合称根文件系统。Linux启动后首先要挂接这个根文件系统。2、linux以树状结构管理目录和文件,其他分区挂接在某个目原创 2017-08-19 11:30:40 · 2315 阅读 · 0 评论 -
Linux驱动开发-简单例子
1、软件系统分为:应用程序、库、操作系统(内核)、驱动程序,开发人员专注某一层,了解邻层的接口。如,应用程序调用库函数open,库根据open传入的参数执行swi指令引起CPU异常进入内核。内核的异常处理函数根据参数找到相应驱动程序。内核与驱动程序没有界限,因为驱动程序最终是要编进内核。驱动程序从不主动运行。在有MMU的系统中,应用程序处于用户空间,驱动程序处于内核空间。2、Linux外设分为:字符原创 2017-08-26 11:42:27 · 2189 阅读 · 0 评论 -
嵌入式系统入门及一些逻辑解析
开始-写下嵌入式学习历程的所思所得原创 2017-07-09 13:01:05 · 1297 阅读 · 1 评论