Linux驱动开发之内存管理基础

内存管理主要分为: 物理内存管理 虚拟内存管理 物理内存管理 页 物理内存以页(page frame)为单位,一般为4K,如果是4G的内存那么,将会有一个大小为4G/4K=1M的数组mem_map,每一项保存着每一页的地址。 Zone Zone是一些连续物理页的合集,参看下面的图3-2。将物理页分成了3个Zone区: ZONE_HIGHMEM:物理内存高于896M的区域 ZONE_NORMAL:常规内存区域,如果DMA可以在此区域做内存访问,也可以使用这块区域 ZONE_DMA:0~nM,不同的架构和不同的芯片都可能不一样 因为数组mem_map与物理页对应,因此mem_map也被默认分为了上面三个区域。 内存节点 分为两种: UMA:只有一个内存节点,CPU访问内存的内存的任何地址的速度是一样的。 NUMA:多个处理器,每个处理器都有自己的本地内存,通过总线通讯。访问本地内存比访问其他节点的内存快。 物理页面分配器:伙伴系统 伙伴系统的特征与作用: 使用物理页为单位

Continue reading »

用gitlabCI快速搭建一个GitServer与CI

一般的公司一般都有一个或者多个中央Git Server,托管着所有项目代码;同时当一个项目很大,由许多个工程组成,例如Tizen和Android,那么一般还有Continuous Integration(CI)在有人push代码到工程时编译整个项目,编译出错一般CI会发邮件给提交者和管理者,从而可以及时修正错误。 Git Server安装与使用 Git server很多,列举一部分: WINDOWS GitStack:免费版只能有两个账号 SCM Manager LINUX GitLab Git-Deamon Git使用-bare生成 获取与安装 这里使用gitlab,到这里下载bitnami gitlab一键安装包。安装非常简单,只需要添加可执行权限然后用sudo ./XXX.run 执行即出现图形化的安装向导。在安装过程中需要设置用户名和密码用于后面配置使用。

Continue reading »

SPI Nor Flash

SPI协议 Slave与Master 一般而言,提供clock的一方称为master。如下图(7-1)中的SCLK方向可知:Processor为master,而Peripheral为slave。 SPI设备接口 SPI uses four main signals: Master Out Slave In (MOSI) Master In Slave Out (MISO) Serial

Continue reading »

Speed up Booting Embedded System

嵌入式产品的启动时间一般是一个指标,像大部分Android手机几乎没有为启动加速做过优化,可以改进的地方非常多。当然因为Android用得最多的地方是手机,难得冷启动一次。 用户从按下电源键开始,看到启动logo或者启动动画到出现可操作的Home/App画面,需要的时间越少,自然越好,产品的竞争力也越强。 一般没有系统的嵌入式设备启动都是上电即进入正常工作流程,这里只说linux/Android及类似的系统;下面将会简单的说明和列举从启动流程到各个启动过程都可以使用的方法,以及快速启动。 ☞启动流程 要做启动时间优化,需要对启动过程非常熟悉。下面从启动流程说起。 不同的嵌入式设备启动流程很可能不一样,但是绝大部分的linux/Android设备都是一样或者类似的。  ❤图片来源于:http://processors.wiki.ti.com/index.php/Optimize_Linux_Boot_Time ☞工具准备: 串口行间数据计时工具Grabserial的安装与使用 因为依赖python的serial模块,先安装它,在Ubuntu中安装python-serial:

获取工具脚本:

添加可执行权限:

设置以U-boot字符串出现为基准计时的使用示例:

如果要同一行内部计时,例如解压kernel的时候是在一行内的,可以使用-i选项:

我们从MMC出现时开始计时,以下为实例log,其中第一列为从出现指定字符串开始的计时,第二列为与上一行log的间隔:

Continue reading »

ARM Linux BenchMark

背景说明 许多公司有很多不同的ARM SoC的研发产品,ARM核心可能有Cortex-A8/A9/A15,核心数可能有单核双核和四核.现在,几乎每出一款手机,网络上马上就有人对其评测.对比和评测不同ARM SoC 芯片以及嵌入式系统是非常有必要的;通过不同的SoC和其运行的OS对比,可以帮助我们了解我们产品的性能,并根据测试得知系统的瓶颈、找出需要改善的方面。 嵌入式产品的硬件一般都是由处理器、主存、存储器、显示设备、以及其他外设组成。嵌入式产品的软件方面,一般都选用嵌入式系统,如小的RTOS,如VxWorks、μC/OS-III、RTT、DJYOS、FreeRTOSLinux,或者是更复杂的Linux、Android、WinCE。评测和对比的内容一般也主要由软件和硬件这两个方面组成。 预备基础知识 如果只是对Andorid系统或者是WinCE相关系统评测,那么我们完全可以下载一些应用(安装)运行即可评测。而如果要评测的嵌入式系统是基于Linux自己定制的甚至没有GUI的,则很可能需要我们下载源代码编译。因此对基础的编译知识的了解必不可少①。编译配置又与ARM SoC构架相关,所以需要了解一下与ARM构架以及有关的交叉编译的选项,比较ARM SoC种类较少,所以这类问题变得很简单了,一般我们需要根据需要配置-mfpu和-march以及-mfloat-abi,以及编译优化选项。 评测工具介绍 评测工具有很多,在这个网页列出了几十个工具。单单系统性评测工具就有7个。那什么是系统性的BenchMark(引用自unixbench): Do be aware that this is a system

Continue reading »

Ubuntu下nfs server与tftp server的搭建

1. 安装nfs server与tftp server 输入下面命令来安装nfs server, tftp server

2. 配置nfs server与tftp server ①使用sudo权限来编辑tftpd的配置文件:

更改里面的TFTP_DIRECTORY与TFTP_OPTIONS,变成如下形式:

需要将XXX改为你在Ubuntu PC上的username。这里面的TFTP_DIRECTORY的意思是设定作为tftp服务器的位置。因此,我们需要创建这个目录:

Continue reading »

madpaly 移植到 TQ2440 遇到问题madplay not found (2)

上一次遇到了问题,在我确定各类方式无误后, 怀疑原因可能有两个: Reason1:  我安装的Ubuntu 11.10没有需要的那个libid3tag这个文件  编译时lib3tag源码包是不会产生这个的 Reason2:  我哪里设置有问题,即在那个 ./configure …..这里设置有问题. 对于Reason1 ,我换用了一个系统 用Ubuntu 9.10,结果,一次性就搞定了. 既然如此,说明可以了,那么将其中需要的库和二进制文件放入根目录对于文件夹中去试一试. 库已经放入到/usr/lib中,而madplay则已经放入了/bin和usr/bin中 因为用的是nfs根文件系统,拷贝过去后发现是不可以的. 这个是什么原因呢? 回答一楼的问题:【Update Date

Continue reading »

madpaly 移植到 TQ2440 遇到问题 libid3tag was not found (1)

=============================================================================== 上一次构建根文件系统的时候留下了几个问题 第一是没有区分uImage和zImage 第二是对U-boot传入参数的有问题 对于第一个问题,就是需要知道什么时候用的是zImage什么时候是uImage 对于第二个问题,在u-boot中可以直接改变环境变量既可, 如TQ2440的是0选项中的NFS 选项 =============================================================================== 昨天遇到的问题: 1:     弄nfs filesystem 因为一个错误耽误了一天时间 .这个错误是在填入路径的时候没有到达底层 eg /home/tonyho/nfs/rootfs 将后面的rootfs省掉了,这样子就无法被挂载找到/bin sbin 等目录了,改了后就好了.

Continue reading »

TQ2440根文件系统直接编译进内核

直接用TQ2440提供的源码linux2.6.30.4, 然后用其提供的busybox.1.16.0 在(make menuconfig中)没有选中Initial Ram… 时是这样的 看到这里,大约知道除了根文件系统有问题外,其他没有问题. 将文件系统编译进去,遇见问题: make zImage ARCH=arm后,下载zImage.bin到TQ2440,启动系统后居然是这样: 看来这个问题不小,直接bad gzip了 Question1: 该如何解决呢? 不管它继续用uboot的另一个功能 Test Linux Image(zImage) :

Continue reading »

课程设计: 可以用上位机改变下位机的多功能闹钟

功能 时间 — DS1302 温度 — DS18B20 温度报警 闹钟 修改日期时自动更改星期 上位机改变下位机单片机的DS1302时间 闹钟时间 温度报警上下限值 可以通过键盘改变DS1302时间 闹钟时间 温度报警上下限值 改变值时光标会闪 可以控制闹钟的开关并在第一页上显示符号 年月日时分秒的临界值控制 平年闰年对应的二月判断

Continue reading »