2014-12-12 - CPU的高速缓存一般分为一级缓存和二级缓存,现今更多的CPU更是提供了三级缓存。CPU在运行时首先从一级缓存读取数据,如果读取失败则会从二级缓存读取数据,如果仍然失败则再从内存中存读取数据。而CPU从一级缓存或二级缓存或主内存中最终读取到数据所耗费的...
2014-12-12 - 做了一个控制Linux终端状态的实验,程序运行过程中,终端需要调整到 nobuffer、noecho。即,无缓冲,无回显状态。并且一次仅能接受一个字符的输入。 实现如下: int set_cr_noecho_mode() { struct termios ttystate; tcgetattr(0, ttystate); // read curre...
2014-12-12 - 一,libevent简介 libevent是一个支持Windows、linux和bsd等平台的网络事件驱动程序库。它支持多种I/O服用机制,按照优先级从高到低依次为:evport、kqueue、epoll、devpoll、rtsig、poll、select。它可根据操作系统,按照优先级从高到底自主选择驱动。 用户...
2014-12-12 - system()函数在stdlib.h函数库中,通过他可以调用Linux中的脚本。具体使用可以用 man system来看。 这个函数就一个参数,就是你要执行的命令的字符串。比如,调用的脚本位于/home/usr/joker/test.sh,那么就可以这样在c/c++中调用system(/home/usr/joker/t...
2014-12-12 - 做数据库读写操作,文件操作,数据传输,经常需要手动打时间标记,获取时间的函数自然要了然于心。 time_t 这个类型就是用来存储1970年到现在经过了多少秒,需要更精确一些,可以用timeval,它精确到微秒。 struct timeval { long tv_sec; //second long ttv...
2014-12-11 - 嵌入式系统开发分为硬件部分和软件部分: 硬件部分: 1、ARM介绍 嵌入式产品硬件,主要是一块以(ARM、 DSP、 FPGA)为核心的开发板。根据不同的需求,配置不同的外设,因为嵌入式产品是为特定应用而生的,所以利用这些嵌入式芯片可以开发出很多产品;ARM是...
2014-12-11 - 个人认为对Linux下I/O资源的管理如掌握__request_region函数就能掌握其精髓。 Linux下对I/O资源主要用结构体resource来管理,管理的方法就是用resource来描述使用的I/O资源的状态,并将这些resource用如下两个resource作为表头按地址大小的顺序链接起来。 st...
2014-12-10 - 1.安装准备 (1) 下载sqlite-3.6.16.tar.gz软件包:http://www.sqlite.org/sqlite-3.6.16.tar.gz (2) 执行tar zxvf sqlite-3.6.16.tar.gz解压缩 (3) 确保arm-linux交叉编译链能正常使用 2 安装x86版本 cd sqlite-3.6.16 ./configure make make install 安装完...
2014-12-10 - 首先编译安装 SQLite x86和arm版本,参见【搭建SQLite3嵌入式开发环境】。 (1) x86版 gcc -o login.cgi -L/usr/local/lib/ -I/usr/local/include/ -static login.c -lsqlite3 -lpthread (2) arm版 arm-linux-gcc -o login.cgi -L/usr/local/sqlite/lib/ -I/u...
2014-12-10 - RTC(real time clock)实时时钟,主要作用是给Linux系统提供时间。RTC因为是电池供电的,所以掉电后时间不丢失。Linux内核把RTC用作离线的时间与日期维护器。当Linux内核启动时,它从RTC中读取时间与日期,作为基准值。在运行期间内核完全抛开RTC,以软件的形...
2014-12-10 - 这个是linux内核文档关于rtc实时时钟部分的说明,此文档主要描述了rtc实时时钟的作用和编程接口,分别介绍了老的rtc接口和新的rtc类架构。并给出了一个测试rtc驱动的程序。 当linux开发者提到实时时钟的时候,他们通常所指的就是墙钟时间,这个时间是电池供...
2014-12-10 - 经常在调用Linux 系统api 的时候会出现一些错误,比方说使用open() write() creat()之类的函数有些时候会返回-1,也就是调用失败,这个时候往往需要知道失败的原因。这个时候使用errno这个全局变量就相当有用了。 在程序代码中包含 #includeerrno.h,然后每次...
2014-12-10 - Bash中,数组变量的赋值有两种方法: (1) name = (value1 ... valuen) 此时下标从0开始 (2) name[index] = value 下面以一个简单的脚本来说明,脚本内容如下: #!/bin/bash #定义数组 A=(a b c def) #把数组按字符串显示输出 echo ${A[@]} #屏幕显示:a b c...
2014-12-10 - 1.SMP硬件体系结构: 对于SMP最简单可以理解为系统存在多个完全相同的CPU,所有CPU共享总线,拥有自己的寄存器。对于内存和外部设备访问,由于共享总线,所以是共享的。Linux操作系统多个CPU共享在系统空间上映射相同,是完全对等的。 由于系统中存在多个CPU...
2014-12-10 - 我这里用到的Linux内核版本是linux2.6.33.3 其实添加系统调用是一件很简单的事情,因为你只是定义一些处理函数,添加符号表,其他的调度都是由内核来帮忙做的。 1.下载内核 http://www.kernel.org/pub/Linux/kernel 2.配置 tar -xzvf Linux-2.6.33.3.tar.gz...
2014-12-10 - 针对IA64体系结构 在Linux操作系统中,特别是针对SMP或者NUMA架构的多CPU系统的时候,描述每个CPU的私有数据的时候,Linux操作系统提供了per_cpu机制。 per_cpu机制就是让每个CPU都有自己的私有数据段,便于保护与访问。 通过宏DEFINE_PER_CPU,定义这种私有...
2014-12-10 - 1. TAS lock (test-and-set) 这是最简单的spinlock,CPU会在硬件上提供一些指令来帮助OS实现spinlock, 比如x86就有xchg, LOCK指令前缀等指令。。。 test_and_set()可以利用这些指令对某个memory地址,来原子地完成: 写入true到这个地址,同时返回这个地址...
2014-12-10 - 前言 之前读了关于顺序一致性和缓存一致性讨论的文章,感觉豁然开朗。对linux内核中出现的种种同步和屏障,想做一点总结。 缓存一致性 之前一直认为linux中很多东西是用来保证缓存一致性的,其实不是。缓存一致性绝大部分是靠硬件机制实现的,只有在带lock前...
2014-12-10 - 经过之前的摸索,对Linux内核的学习有一些自己的看法,就列一下自己支持的学习方法: 1、要选最新的内核去学。Linux内核版本变化太快了。Linux 0.11就是一个自己动手写操作系统的范例,而到Linux 2.4则发展到百万行级,被移植到各种平台。到2.6呢,Linux在这...
2014-12-09 - 开始学习《Unix网络编程》,输入第一个程序后,遇到各种错误,先将解决方案记录如下。 遇到的第一个错误是:没有找到头文件unp.h,该头文件是作者自己写的,并不包含在/usr/include中,这时需要到网上下载unpv13e.tar.gz到某一目录。具体操作: mkdir /home...
2014-12-09 - 最近为了学习Android底层设备驱动而把Linux底层设备驱动复习整理了一下。 Linux设备驱动程序是一个内核模块,可以随时添加到内核和随时从内核中删除。很自然,在模块被他人使用时无法删除,因而存在一个模块被使用的计数器。 对比vxWorks/Linux/QNX/OSE等等...
2014-12-09 - Linux内核采用熵描述数据的随机性,熵越大表示系统越混乱。计算机本身是可预测的系统,因此用计算机算法不可能产生真正的随机数。但由于机器中充满了噪声,而这些噪声又很难预测,没有规律可循,因此这些噪声可以作为随机数的产生源。Linux内核就是利用噪声...
2014-12-09 - 一、环境 Linux:RedHat 5.4 内核版本 2.6.18 (用命令uname a 查看) 计划新内核版本 Linux-3.0.4.tar.bz2 (文件保存在 /usr/src中) 操作用户:root 二、内核裁剪计划: 拷贝/boot/config-2.6.18-164.el5 到源代码目录并改名为.config,由于内核选项多达...
2014-12-09 - 在Linux内核中,经常会看到do{}while(0)这样的语句,刚开始会疑惑,认为do{}while(0)毫无意义,因为它只会执行一次,加不加do{}while(0)效果是完全一样的,其实do{}while(0)只要用于宏定义中。 这里用以个简单点的宏来演示: #define SAFE_FREE(P) do{free(p...
2014-12-09 - 首先要做好镜像文件,mypackage.iso jdk安装步骤 - 把mypackage.iso挂载到linux操作系统上 - 在vm做好配置,即把iso关联到cd-rom中 - mount /mnt/cdrom(最好在根目录上去敲这个命令),挂载光驱 - unmount /mnt/cdrom,卸载光驱,即不需要挂载了 - 把安装文件拷...
2014-12-09 - 对于希望学习ARM汇编的同学而言, 购买ARM开发板进行板上实测无疑是一个有效的方法,不过购买ARM开发板需要一笔费用,而且每次测试都需要连接开发板,比较麻烦。如果有一个ARM的模拟器就好了,抱着这样的想法在网上找了一下,发现了Skyeye,还是我们中国人开...
2014-12-08 - 2.6.22.9的Linux内核 使用alloc_bootmem函数 在内核代码 init/main.c文件中 asmlinkage void __init start_kernel(void) { char * command_line; extern struct kernel_param __start___param[], __stop___param[]; . . . cpuset_init_early(); yy_p = alloc...
2014-12-07 - 在学习Linux内核移植部分,今天先在虚拟机上安装linux-3.0.8上做个双系统。 内核配置: 我们一般是找一个配置好的内核配置文件.config来作为配置参考 步骤 1.make clean/ make mrproper/make distclean清除以前对内核所做的工作 2.选择目标系统的的软硬件配...
2014-12-07 - 在RSA使用过程中,公钥加密一般用来协商密钥;私钥加密一般用来签名。 n:模数 e:公钥指数 d:私钥指数 n+e可以组成公钥 n+d可以组成私钥 代码包括 1。生成RSA的数据结构 2。用指定的n,e,d生成RSA的数据结构 3。用私钥加密 4。用公钥解密 5。SHA256报文摘要...
2014-12-06 - 开发时不配置好编码的问题,导致开发难度增大,个人贡献点知识,在web.xml 文件中加入以下代码,即可处理问题。 在web-app节点中添加。 filter filter-nameEncodingFilter/filter-name filter-class org.springframework.web.filter.CharacterEncodingFilter...
2014-12-06 - [临界区和竞争条件] 所谓临界区就是访问和操作共享数据的代码段。多个执行线程并发访问同一个资源通常是不安全的,为了避免在临界区中并发访问,coder必须保证这些代码原子执行。 如果两个执行线程有可能处于同一个临界区中同时执行,那么这就是程序包含的一...
2014-12-06 - Linux自从2.6.20之后,工作队列发生了一些变化,目前从网络上搜索的资料一般都是介绍老版本的工作队列,很少见到对新版本的介绍。本文对新老版本都做了简要概述,并分别提供了简单的实作案例。 工作队列(work queue)是Linux kernel中将工作推后执行的一种机...
2014-12-06 - [THIS_MODULE] 模块是一种可以在内核运行过程中动态加载、卸载的内核功能组件。2.6内核中模块在被使用时,是不允许被卸载的。编程是需要用使用计数来描述模块是否在被使用。THIS_MODULE就充当了这个功能。 [likely unlikely] 在2.6的内核中经常看到这两个符...
2014-12-05 - C语言库函数的文件操作实际上是独立于具体的操作系统平台的,不管是在DOS、Windows、Linux还是在VxWorks中都是这些函数。 创建和打开的函数: FILE *fopen(const char *path, const char *mode); fopen()实现打开指定文件filename,其中的mode为打开模式,C...
2014-12-05 - 我们来学习下简单的自定义函数。 下面是个最简单的自定义函数,打印一个空行 void newline(void){ print (/n); } 然后我们在主函数里面调用它,看下效果,首先新建一个文件,two.c: [root@ www ~]# vi two.c #include stdio.h void newline(void){ printf(\n...
2014-12-05 - 开发平台:Ubuntu11.04 目标板:优龙FS2410 编译器:arm-gcc-4.1.1.tar.bz2 在编译Linux-2.6.38.8内核的最后阶段出现s3c_device_ohci未定义的错误: arch/arm/mach-s3c2410/built-in.o:(.init.data+0x30): undefined reference to `s3c_device_ohci make: **...
2014-12-05 - 开发平台:Ubuntu 11.04 Yaffs2源码包:yaffs2.tar.bz2 通过以下命令即可在Linux-2.6.38.8上成功移植yaffs2文件系统(以下命令都是基于内核源码目录linux-2.6.38.8和yaffs2源码包yaffs2.tar.bz2在Ubuntu的同一目录下)。 $ tar jvxf yaffs2.tar.bz2 $ cd yaf...
2014-12-04 - semaphore概述 信号量 信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们能够正确、合理的使用公共资源。 Semaphore分为单值和多值两种,前者只能被一个线程获得,后者可以被若干个线程获得。 以一个停...
2014-12-04 - 最近想测试下Openfire下的最大并发数,需要开大量线程来模拟客户端。对于一个JVM实例到底能开多少个线程一直心存疑惑,所以打算实际测试下,简单搜索了把,找到影响线程数量的因素有下面几个: -Xms intial java heap size -Xmx maximum java heap size -Xss...
2014-12-04 - CRC:Cyclic redundancy check 循环冗余校验 内核中使用的crc16计算方法位于代码树/lib/crc16.c文件中 crc32的计算方法位于代码树/lib/crc32.c文件中 均采用了查表法 其中crc32的表由代码树/lib/gen_crc32table.c中的主机小程序计算而来 生成的冗余表保存在...