一.内存管理基本知识 1.S3C2440最多会用到两级页表:以段的方式进行转换时只用到一级页表,以页的方式进行转换时用到两级页表.页的大小有三种:大页(64KB),小页(4KB),极小页(1KB).条目也称为"描述符",有:段描述符,大页描述符,小页描述符,极小页描述符——他们保存大页,小页,极小页的起始物理地址:粗页表描述符,细页表描述符——他们保存二级页表的物理地址. 2.一级页表描述符的最低两位,可分为以下四种情况: (1).0b00:无效. (2).0b01:粗页表. (3).…
SDRAM: 原理图如下:          jz2440 v3开发板上面用的内存芯片为钰创科技公司生产的EM63A165TS,一片内存大小为32MB大小,一共有两块,共64MB的大小. SDRAM接的是BANK 6,所以他的起始地址是 0x30000000. SDRAM的基本寻址关系 SDRAM的存储结构逻辑如上图,  SDRAM内部是一个存储阵列,阵列就如同表格一样,将数据"填进去".和表格的检索原理一样,先指定一个行,再指定一个列,两点确定一个坐标,就可以准确地找到所需要的 单元…
void * kmalloc(size_t size, gfp_t gfp_mask); kmalloc()第一个参数是要分配的块的大小,第一个参数为分配标志,用于控制kmalloc()的行为. kmalloc()的底层依赖于__get_free_pages()来实现,分配标志的前缀GFP正好是这个底层函数的缩写. GFP_ATOMIC:在中断处理函数.底半部.tasklet.定时器处理函数以及URB完成函数中,在调用者持有自旋锁或读写锁时以及当驱动将current->state修改为非TASK…
1.进程基础 当输入一个命令时,shell 会同时启动一个进程,这种任务与进程分离的方式是 Linux 系统上重要的概念 每个执行的任务都称为进程,在每个进程启动时,系统都会给它指定一个唯一的 ID,称为进程 ID(PID) 对进程进行管理必须以进程 ID 作为对象,而非进程名称 每个进程都可能以前台或后台两种方式存在,bg 表示后台执行,fg 表示前台执行 在命令后加 & 使进程在后台执行 2.显示进程 可以使用 ps 命令(Process Status)显示当前运行的进程,显示的内容如下:…
1.用户与组账号 用户账号:包括实际人员和逻辑性对象(例如应用程序执行特定工作的账号) 每一个用户账号包含一个唯一的用户 ID 和组 ID 标准用户是系统安装过程中自动创建的用户账号,其中除 root 是管理者外,其余的都是系统账号 组账号:组是逻辑性单元,用来集合特定的用户,以便于其中的所有成员对文件具有相同的访问权限 标准组是系统自动添加的,其中除 root 组用来组织管理者外,其余的供程序执行时使用 2.账号信息 (1)用户账号信息 有关用户账号的信息都记录在 /etc/passwd 文件…
XV6学习笔记(2) :内存管理 在学习笔记1中,完成了对于pc启动和加载的过程.目前已经可以开始在c语言代码中运行了,而当前已经开启了分页模式,不过是两个4mb的大的内存页,而没有开启小的内存页.接下来就可以从main.c的init函数开始 这里会和JOS做一个对比 首先看一下在执行main.c之前的物理内存分布 0x0000-0x7c00 引导程序的栈 0x7c00-0x7d00 引导程序的代码(512字节) 0x10000-0x11000 内核ELF文件头(4096字节) 0xA0000-…
嵌入式Linux学习分五个阶段 第一阶段: 01嵌入式环境搭建初期 02C语言语法概述 03C语言内存操作 04c语言函数 05linux基础 06gun基础 第二阶段: 01-linux之io系统编程 02-linux进程间通信 03-linux多线程 04-linux网络编程基础 第三阶段: 01-ARM开发板基础知识 02-ARM汇编语言 03-ARM硬件开发基础 04-ARM Bootloader开发 05-ARM硬件接口开发 第四阶段: 01-移植搭建 02-uboot.UART.DD…
一 页 内核把物理页作为内存管理的基本单位:内存管理单元(MMU)把虚拟地址转换为物理 地址,通常以页为单位进行处理.MMU以页大小为单位来管理系统中的也表. 32位系统:页大小4KB 64位系统:页大小8KB 内核用相应的数据结构表示系统中的每个物理页: <linux/mm_types.h> struct page {} 内核通过这样的数据结构管理系统中所有的页,因此内核判断一个页是否空闲,谁有拥有这个页 ,拥有者可能是:用户空间进程.动态分配的内核数据.静态内核代码.页高速缓存…… 系统中…
1. 进程地址空间 Linux中,进程并不是直接操作物理内存地址,而是每个进程关联一个虚拟地址空间 内存页是memory management unit (MMU) 可以管理的最小地址单元 机器的体系结构决定了内存页大小,32位系统通常是 4KB, 64位系统通常是 8KB 内存页分为 valid or invalid: A valid page is associated with an actual page of data,例如RAM或者磁盘上的文件 An invalid page is…
一  嵌入式系统定义: 应用于特定环境的硬件体系. 二  两样非常重要的能力: 1.  掌握各种新概念的能力 2.  调试的能力( 包括软件, 硬件 ) 三  需要的基础知识: 1.  操作系统理论基础 2.  数据结构 3.  C,C++编程语言 4.  汇编语言 5.  Linux基础能力 6.  单片机基础 四  结构框架: 1.  bootloader( 作用:a. 初始化硬件 b. 引导操作系统 ) 2.  kernel 3.  文件系统 它们都置于flash中. 五  flash六大…
在成功构建了一个能够运行在开发板平台的系统后,下一步就要正式开始应用的开发(这里前提是有一定的C语言基础,对ARM体系的软/硬件,这部分有疑问可能要参考其它教程),根据需求仔细分解任务,可以发现包含的外设有LED,BEEP,RS232,六轴传感(SPI接口),光环境传感器(I2C),音频输出, RTC等,如果按照这个顺序去实现驱动,一定程度其实又回归最初的模块学习的策略,不过既然是从应用的角度,先实现应用框架,来验证是否符合预期,这比测试模块驱动的更重要,也更容易有产出感. 按照这个需求,就可以…
配置好linux系统之后需要vim配置一下,有助于我们的编程,主要的配置如下 在/etc/vim/vimrc文件中 "显示行号 set number "自动缩进 set autoindent "智能缩进 set smartindent "一次四格 tab set tabstop=4 "一次四格 set shiftwidth=4 "括号匹配 set showmatch "右下角显示光标状态行 set ruler "文件类型检测…
一.查看磁盘或目录的容量 1.  df命令 作用:查看已挂载磁盘的总容量.使用容量.剩余容量等,可以不加任何参数,默认是按k为单位显示的 参数: -I : 查看inodes使用状况 -h: 使用合适的单位显示,例如 ‘G’ -k: 以K 为单位显示 -m: 以 M 为单位显示 注意:/dev/shm为内存挂载点,如果你想把文件放到内存里,就可以放到/dev/shm/目录下 2.  du命令 作用:用来查看某个目录或文件所占空间大小. 格式:du [-abckmsh] [文件或者目录名] 常用的参…
通过上两篇博客.我们对Cocos引用计数和Ref类.PoolManager类以及AutoreleasePool类已有所了解,那么接下来就通过举栗子来进一步看看Coco2d-x内存执行原理是如何的. //先建一个node Node * node = Node::create(); //创建完之后打印node的引用计数 schedule([node](float f){ //获得node的引用计数 int count = node->getReferenceCount(); //打印node的引用计…
目录 (1).参考资料 (2).QT界面布局实现 (3).数据和操作逻辑 在上一章我们实现了下位机的协议制定,并通过串口通讯工具完成了对设备内外设(LED)的状态修改,下面就要进行上位机软件的实现了(事实上这部分不属于嵌入式Linux的内容,所以只在本章节讲述下上位机实现的流程和思路,后续维护更新不在进行详细说明,不过下位机界面实现肯定还会涉及这些技术),上位机的界面方案一般指在Windows平台的软件界面开发,如UWP,WINFORM/C#, WPF/C#, QT/C++等,如果说我的个人倾向…
一,内存管理类型定义      1,基本类型  任何C的类型,eg:      int,short,char,long,long long,struct,enum,union等属于基本类型或结构体      内存管理对于C语言的基本类型无效      2,OC类型(非基本类型)      任何继承于NSObject类的对象都属于OC类型      也就是除了C之外的其他类型 二,OC对象结构      所有OC对象都有着一个计数器,保留着当前对象被引用的数量,如果计数器为0,那么就真正的释放这个…
本章节介绍例如以下: 1.C/C++内存管理机制 2.引用计数机制 3.自己主动释放机制 1.C/C++内存管理机制 相信仅仅要懂oop的都知道NEW这个keyword吧,这个通俗点说事实上就是创建对象,当然了,在.net其中还有另外一层意思.new 对象后他将在内存中分配一块内存空间,在JAVA和.net中有自己主动回收机制,由clr管理,不须要我们手动释放内存,你闲的蛋疼也能够自己去释放. 在C++中遵循一个机制,谁污染谁清理.所以就会成对出现   有new就得有delete 光说不练是浮云…
本文转载自Netprawn,原文英文版地址 尽管在.net framework中我们不太需要关注内存管理和垃圾回收这方面的问题,但是出于提高我们应用程序性能的目的,在我们的脑子里还是需要有这方面的意识.明白内存管理的基本行为将有助于我们解释我们程序中变量是如何操作的.在本文中我将讨论栈和堆的一些基本知识,变量的类型和某些变量的工作原理.当你在执行程序的时候内存中有两个地方用于存储程序变量.如果你还不知道,那么就来看看堆和栈的概念.堆和栈都是用于帮助我们程序运行的,包含某些特殊信息的操作系统内存模…
1. 总结 Sprite和SpriteFrame和Texture2D关系紧密,三个类都继承了Ref类.精灵有成员精灵帧和纹理,精灵帧有成员纹理.精灵帧和纹理被精灵帧引用时,引用计数增加,不再被引用时,引用计数减少.纹理被精灵帧引用时也同理. 一个纹理可以被多个精灵帧.精灵引用,一个精灵帧可以被多个精灵引用. 为什么纹理缓存容器不用CC的包装类Map 纹理缓存和精灵帧缓存不同,纹理缓存的容器不是包装类,即向容器中增加和删除纹理不会改变纹理的引用计数. 纹理除异步之外不执行autorelease()…
第5章 内存管理 1.野指针 定义指针变量的同时最好初始化为NULL,用完指针后也将变量的值设置为NULL.也就是说除了使用时,别的时间都把它设置为NULL 2.堆,栈和静态区 堆:由malloc系列函数或new操作符分配的内存.其生命周期由free或delete决定 栈:保存局部变量 静态区:保存自动全局变量和static变量.整个程序的生命周期都存在,由编译器在编译的时候分配 3.常见的内存错误 结构体成员指针未被初始化 没有为结构体指针分配足够的内存 一般在函数入口使用 assert(NU…
学习记录: 到今天为止ARM裸机开发学习进程:1.2.1-1.2.14 预科班知识Linux介绍学习进程:0.2.1-0.2.6 学习内容笔记: 学习了Linux的开发方式的优劣介绍 学习了常用文件夹命令 ls(list) ls -a 显示所有文件(包括隐藏文件) ls -l 显示所有详细信息 ls -a -l也可以 man(查询命令) man 1 ls(1表示查询命令,ls表示查询的内容) cd(change directory) cd ..代表上一层 cd ../../代表上上层 cd .是…
目录:1.用户的创建和管理    2.组的创建和管理 3.文件执行权限的控制 4.不用密码执行sudo 1.用户的创建和管理 用户的创建和管理: useradd.usermod . userdel .passwd(只有通过passwd,设定了密码之后才可以登陆) 相关文件:/etc/passwd (用户的基本信息包括用户简单描述和目录等)/etc/shadow(密码信息) 例子:useradd -m -d /home/benson -c Comment benson 2.组的创建和管理 组的创建…
df df命令参数功能:检查文件系统的磁盘空间占用情况.可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息. 语法: df [-ahikHTm] [目录或文件名] 选项与参数: -a :列出所有的文件系统,包括系统特有的 /proc 等文件系统: -k :以 KBytes 的容量显示各文件系统: -m :以 MBytes 的容量显示各文件系统: -h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示: -H :以 M=1000K 取代 M=1024…
逻辑地址由16位segment selector和offset组成 根据segment selector到GDT或LDT中去查找segment descriptor 32位base,20位limit,G为0表示limit单位为1byte,1表示单位为4k bytes. 下图表示segment selector到segment的映射过程. x86提供寄存器用于快速查找(不经过GDT或LDT).每次从GDT中取出,就存到寄存器中,相当于一个缓存的作用. GDT如下图: Most Linux User…
一.NAND Flash介绍和NAND Flash控制器的使用 NAND Flash在嵌入式系统中的作用,相当于PC上的硬盘 常见的Flash有NOR Flash和NAND Flash,NOR Flash上进行读取的效率非常高,但是擦除和写操作的效率很低,容量一般比较小:NAND Flash进行擦除和写操作的效率更高,并且容量更大.一般NOR Flash用于存储程序,NAND Flash用于存储数据. 1)NAND Flash的物理结构 笔者用的开发板上NAND Flash型号是K9F1G08,…
中断是什么? 举个栗子, 系统怎么知道你什么时候插入鼠标这个设备? 可以有两种处理方式: 1. 查询方式: 轮询去检测是否有设备插入; 2. 中断的方式 当鼠标插入这个事件发生时, 置位某个寄存器,告诉CPU去处理这个事件. 对于查询方式, 我们需要一直去监控想要知道的状态, 而中断的处理方式, 使得CPU有空去处理其他的事情, 当插入鼠标这个时间发生时才来处理这个事件, 这样下来, 处理效率会高很多,中断的作用也可见一斑. 下面介绍s3c2440的中断控制器 s3c2440有60个中断源, 这…
常用的flash有两种, Norflash和Nandflash, 前几年市场上的产品比较常见的方案时Norflash和Nandflash搭配使用, 因为norflash比较昂贵,相同的容量norflash要贵上很多,.一般要把运行的程序存放在norflash上面, 数据存放在nandflash上面. 其实我有点纳闷,为什么不直接用一块nandflash就解决了? 但这样设计会有一个好处就是nandflash坏了的话,程序还能跑起来, 可以利用软件去做一些动作,对于排查可能会有好处. 其他的时no…
搜索开发板原理图LED的走线           LED8是网线接口的指示灯. 在这里我们尝试用汇编代码控制D10, 也就是LED1,它连接到EINT4/GPF4,读取芯片手册 有原理图可知,如果需要点亮LED1,需要控制s3c2440的GPF4引脚输出低电平. GPFCON = 0x56000050 GPFDAT = 0x56000054 GPFUP = 0x56000058 ========================= 直接set 0x56000050 = 0x100  设置GPF4为…
购买韦东山嵌入式开发板jz2440 v3会标配两根usb线和一根网线,OpenJtag需要单独购买, 我暂时还没买到该工具. 下面介绍usb烧录以及通过网线烧录程序. 1.usb烧录程序: 借助DNW工具通过usb线烧录程序到Nandflash. 操作步骤: a. 开发板断电,  ①处拨成从norflash启动, ②处接到电脑的usb口, 同时连接好开发板的串口, 然后开发板上电. b. 上电之后在倒数结束后按空格件进入uboot, 可以看到uboot输出一个菜单,输入n,选择下载程序到nand…
>显示gong.tar 文件内容 #tar tf gong.tar ./epuinfo.txt ./smart/ ./smart/smartsuite-2.1-2.i386.rpm ./smart.txt ./tar_creat.txt >从tar文件中取出文件对当前目录下的gong.tar解包 #tar xvf gong.tar 压缩/解压缩工具 >gzip/gunzip  --文件扩展名->.gz >zip/unzip --文件扩展名->zip >tar --…