2014-11-25 - Linux bash calculator 感觉用起来蛮方便,至少是偷懒比较方便,嘻嘻 How to: 1.通过命令行 #scale 表示浮点数的精确位数 [root@www ~]# bc bc 1.06 Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc. This is free software with ABSO...
2014-11-24 - 以Freesclae的i.MX51为基础进行分析。 先分析下面的代码: arch/arm/kernel/setup.c extern struct sys_timer *system_timer; 672 void __init setup_arch(char **cmdline_p) 673 { ... 675 struct machine_desc *mdesc; ... 681 mdesc = setup_machine(mach...
2014-11-24 - 一.问题 众所周知,ARP是一个链路层的地址解析协议,它以IP地址为键值,查询保有该IP地址主机的MAC地址。协议的详情就不详述了,你可以看RFC,也可以看教科书。这里写这么一篇文章,主要是为了做一点记录,同时也为同学们提供一点思路。具体呢,我遇到过两个...
2014-11-24 - sbrk/brk:brk和sbrk主要的工作是实现虚拟内存到内存的映射.在GNUC中,内存分配是这样的: 每个进程可访问的虚拟内存空间为3G,但在程序编译时,不可能也没必要为程序分配这么大的空间,只分配并不大的数据段空间,程序中动态分配的空间就是从这一块分配的。如...
2014-11-24 - 要分析一款开源的软件除了要弄清楚一些基本的使用和配置之外,其次最重要的就是对源代码进行分析。对源代码进行分析首先应从其main函数分析入手,了解他在启动时的涉及的哪方面的功能,并勾勒出他的运行流程图,现在squid已经支持windows平台了,并且支持以...
2014-11-24 - 1. 引言 本文档解释了怎样在Linux2.6中实现一个新的系统调用。一个系统调用被应用程序用来向操作系统请求服务。 2. 系统调用 一个系统调用被应用程序用来向操作系统请求服务。下面的语句阐述了为什么需要 系统调用。一个操作系统可以直接访问一个系统的硬件...
2014-11-24 - 或许是我见得少,反正这是目前遇到最好命令行参数例子,下面给出源码及简单介绍: 第一部分:主要是声明一个结构体,将解析到的参数放在结构体中,同时还给出一个默认参数; 16 #include getopt.h 61 typedef struct Args { 62 VideoStd_Type videoStd; 63 C...
2014-11-24 - Linux中卸载文件系统由umount系统调用实现,入口函数为sys_umount()。较于文件系统的安装较为简单,下面是具体的实现。 /*sys_umont系统调用*/ SYSCALL_DEFINE2(umount, char __user *, name, int, flags) { struct path path; int retval; /*找到装载点的vf...
2014-11-24 - 在文件读写之前,我们必须先打开文件。从应用程序的角度来看,这是通过标准库的open函数完成的,该函数返回一个文件描述符。内核中是由系统调用sys_open()函数完成。 /*sys_open*/ SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, int, m...
2014-11-24 - 在文件成功打开之后,进程将使用内核提供的read和write系统调用,来读取或修改文件的数据。内核中文件读写操作的系统调用实现基本都一样,下面我们看看文件的读...
2014-11-24 - 在shell编程中,对于多分支判断,用if 虽然也可以实现,但有些时候,写起来很麻烦,也不容易代码理解。这个时候,可以考虑case。大道理不讲了,先给出个简单的demo吧。 #! /bin/sh - name=`basename $0 .sh` case $1 in s|start) echo start... ;; stop) ech...
2014-11-24 - 1.Makefile的分析: 1)Linux内核编译简述: Linux2.6内核引入了kbuild机制,通过makemenuconfig配置把配置信息保存到.config 文件中,当.config文件被改变之后,在重新编译,Kbuild能够保证只进行最小化的编译。 Linux内核的编译系统主要包括的文件: 交叉...
2014-11-24 - 1.内核配置精简 花了点时间终于弄清了vmware的硬件情况,配置简单内核主要为了学习源码方便 我的vmware虚拟机把硬盘和cdrom都设置成scsi接口的,这样内核ide选项就不用选了 在2.6.10和3.2.5都试过了,可以启动,两个内核分别在RedHat9和arch上实验的,安装的实...
2014-11-24 - 源程序: #include signal.h #include stdio.h #include math.h #include stdlib.h int main(int argc,char **argv) { double y; sigset_t intmask; int i,repeat_factor; if(argc!=2) { fprintf(stderr,Usage:%s repeat_factor\n\a,argv[0]); exit(1); } i...
2014-11-23 - 一:Linux kernel内存存布局 在ARM平台中zImage.bin是一个压缩镜像,它用于将被压缩的kernel解压缩到KERNEL_RAM_PADDR开始的一段内存中,接着跳进真正的kernel去执行。该kernel的执行起点是stext函数,定义于arch/arm/kernel/head.S。 在我的YL-E2410的平台...
2014-11-23 - Linux内核编译完成后会生成zImage内核镜像文件。zImage是如何解压的呢?本文将结合关键代码,讲解zImage的解压过程。还是先来看看zImage的组成吧。在内核编译完成后会在arch/arm/boot/下生成zImage。 在arch/arm/boot/Makefile中,如下代码: # # arch/arm/b...
2014-11-23 - /** * wait_for_completion: - waits for completion of a task * @x: holds the state of this particular completion * * This waits to be signaled for completion of a specific task. It is NOT * interruptible and there is no timeout. * * See als...
2014-11-23 - 下面是一个简单的CPU监控脚本,当然还可以在进行全面考虑升级该脚本。 #!/bin/sh #-gt 60 服务器只有一个CPU scriptdir=/root/shell/cpu_jk #目录存放 logdir=$scriptdir/log #日志文件存放及目录创建/清理 if [ -d $logdir ] then echo $logdir is exist~!...
2014-11-23 - Linux系统定时器,在内核中扮演着重要角色。内核的许多重要实现如任务调度,工作队列等均以系统定时器关系密切。系统定时器能以可编程的频率中断处理,这一中断叫做软中断。此频率即为每秒的定时器节拍数HZ。HZ的越大,说明定时器节拍越小,线程调度的准确性...
2014-11-23 - 第一步:工具栏上右键选择Customize(自定义),选择Add-ins and Macro Files(附加项和宏文件)页,把SAMPLE前面打上钩。 第二步:选择Commands(命令)页,Category(类别)选Macros,然后在Commands中把CommentOut(注释)拖曳到工具栏快捷方式。 第三步:选择Keybo...
2014-11-23 - 最近PHP爆出一个非常低级的错误 Bug #61095,16进制数字加法错误! 下面的代码输出是什么呢? echo (0x00+2); echo (0x00+0x02); echo (0x00 + 2); 是不是应该是:2,2,2 ? 但是PHP输出是 4,4,2! 我刚刚测试过了,该Bug的确存在,我的PHP版本是 PHP 5.3.2。...
2014-11-23 - 内存管理是一个操作系统必不可少.并且.非常重要的一环.linux的成功.和它优秀的内存管理联系非常密切.因为一个系统的高效性欲稳定性往往决定于它的内存管理机制.我项很多人吃过dos下640k 的苦吧. 前面我们介绍了386保护模式.从今天起我们将在此基础上,分析lin...
2014-11-22 - Linux运用一个功能广泛的缓冲和缓存框架来提高系统的速度。缓冲和缓存利用一部分系统物理内存,确保最重要、最常使用的块设备数据在操作时可直接从主内存获取,而无需从低速设备读...
2014-11-22 - 这些代码片段展示如何使用Linux内核模块,list,以及hash。 ===================tccounter.c===================== #include linux/init.h #include linux/module.h #include linux/moduleparam.h #include linux/list.h #include linux/jhash.h #include li...
2014-11-22 - 在Linux内核中,并非总使用基于页的方法来承担缓存的任务。内核的早期版本只包含了块缓存,来加速文件操作和提高系统性能。这是来自于其他具有相同结构的类UNIX操作系统的遗产。来自于底层块设备的块缓存在内存的缓冲区中,可以加速读写操作。 与内存页相比...
2014-11-22 - 1、字符串判断 str1 = str2 当两个串有相同内容、长度时为真 str1 != str2 当串str1和str2不等时为真 -n str1 当串的长度大于0时为真(串非空) -z str1 当串的长度为0时为真(空串) str1 当串str1为非空时为真 2、数字的判断 int1 -eq int2 两数相等为真 int1...
2014-11-22 - 在我们使用ARM等嵌入式Linux系统的时候,一个头疼的问题是GPU,Camera,HDMI等都需要预留大量连续内存,这部分内存平时不用,但是一般的做法又必须先预留着。目前,Marek Szyprowski和Michal Nazarewicz实现了一套全新的Contiguous Memory Allocator。通过这...
2014-11-22 - 在分析了进程的虚拟地址布局,我们转向内核以及他管理用户内存的机制。 Linux进程在内核中是由task_struct进程描述符实现的,task_struct的mm字段指向内存描述符mm_struct,他是进程的一个内存执行摘要。如上图所示,mm_struct存储了内存各个段的开始和结束...
2014-11-21 - 1. 简介 对于mmap在用户态通过函数以下函数进行调用: void*mmap( void*addr,size_tsize, intprot, intflags, intfd,longoffset ) 然后进入系统调用。 2. Kernel mmap实现 1)然后进入系统调用,其系统调用号为: kernel/arch/arm/include/asm/unistd.h #defin...
2014-11-21 - 前面已经讲过,高精度timer是通过hrtimer来实现的,hrtimer通过可编程定时器来现,在等待时,不占用CPU。 在用户态,只要我们调用usleep,则线程在kernel态执行时,则使用hrtimer进行不占CPU的等待。 在Kernel中如何使用的呢? 先看看eventpoll.c中的ep_poll...
2014-11-20 - 新内核可以在 http://www.kernel.org 下载。 先把linux-2.6.18.2.tar.bz2 复制到/usr/src/ 的下面 tar jxvf linux-2.6.18.2.tar.bz2 cd linux-2.6.18.2 make mrproper 把原来编译产生的垃圾删除 配置内核可以根据需要与爱好使用下面命令中的一个: #make co...
2014-11-20 - 静态库和动态库的区别: 静态库(xxx.a):GCC在编译生成可执行程序时,从静态库中提取必要的目标文件,在可执行程序编译成功时,同时包含了目标文件,这样带来的缺点是当多个可执行程序同时调用一个库文件时,加载到内存中的库文件可能存在重复,这是对内存...
2014-11-20 - 其他版本其他Linux安装大同小异,我使用的是readhat5,安装的是JDK6+Tomcat6+MyEclipse6。 安装JDK (1) 下载后的BIN文件可以直接在Linux下运行 更改权限: # chmod 755 jdk-1.6.0_23-linux-i586.rpm.bin 执行安装: # ./ jdk-1.6.0_23-linux-i586.rpm.bin 此...
2014-11-19 - C++中的const指针声明方式非常相似,平时很容易记混,今天差点弄错了,特意把用法回顾总结一下。 const在*之前,表示内容不变 const char *p; //*p是const, p可变 char const *p; //*p是const, p可变 const在*之后,表示指针不变 char* const p; // p是const...
2014-11-19 - public class Testclass { private static Connection conn; static{ //加载驱动 try { Class.forName(Oracle.jdbc.driver.OracleDriver); conn=DriverManager.getConnection(jdbc:oracle:thin:@localhost:1521:orcl,scott,scott); } catch (ClassNotFoundEx...
2014-11-19 - load_aout_binary中关于数据段代码段的加载片段如下: /*加载代码段*/ error = do_mmap(bprm-file, N_TXTADDR(ex), ex.a_text, PROT_READ | PROT_EXEC, MAP_FIXED | MAP_PRIVATE | MAP_DENYWRITE | MAP_EXECUTABLE, fd_offset); /*加载数据段*/ error = do_m...
2014-11-18 - 一. 1. 编辑工具采用Source Insight (也可以采用C-Free) 2. 采用FileZilla工具作为linux系统和windows系统的文件传输工具(当然也可以用其他的FTP文件传输工具,如WinSCP) 3. shell工具采用SecureCRT(也可以使用putty工具集,不过该工具没有tab功能) 二. 1....
2014-11-17 - 1,示例 /*exec函数示例*/ #include stdio.h #include unistd.h int main(void) { int flag; pid_t pid; char *const argv[] = {%U, --user-data-dir=/home/Administrator/.chromiun, NULL}; //exec把当前进程印象替换成新的程序文件,故调用进程被覆盖 //...
2014-11-17 - 自Linux 2.6以来(严格说应该是2.5),O(n)调度器被人们认为是一种千年之前就应该抛弃的东西被重重的甩开了,此后出现了O(1),CFS等,再也没人提起O(n)了。说实话,Linux的调度器远比标准Unix的来得复杂,因为Linux被用于不同的场合,从手机一直到大型服务器,...
2014-11-16 - 1.什么是库 在windows平台和linux平台下都大量存在着库。 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。 由于windows和linux的本质不同,因此二者库的二进制是不兼容的。 本文仅限于介绍linux下的库。 2.库的种类 linux下的库有...