![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux/unix
文章平均质量分 57
javaadu
这个作者很懒,什么都没留下…
展开
-
大教堂和集市--两种不同的软件开发模式 论文阅读笔记
该博文来自《The Cathedral and the Bazaar》一文的阅读总结,再加入一些自己的理解。1、Given enough eyeballs, all bugs are shallow.只要眼球足够多 ,所有bug都好捉。原创 2013-10-18 17:30:05 · 3172 阅读 · 0 评论 -
经典数据结构与算法在经典软件(linux kernel)中的应用
参考文章:Core Alorgithms deployed虚拟内存:1、红黑树,管理与进程关联的vm_area_struct实例2、优先查找树(priority search tree),用于建立文件中的一个区域与该区域映射到所有虚拟地址空间的管理,管理与文件关联的各个vm_area_struct实例3、基数数(radix tree)原创 2013-11-27 15:49:30 · 874 阅读 · 0 评论 -
Linux内存管理子系统
1、相关资料收集关于物理内存分布与虚拟地址空间对应的文章:点击打开链接原创 2013-11-13 13:07:12 · 1707 阅读 · 0 评论 -
Linux下系统调用的组成与实现
主要包括三个部分:(1)唯一的系统调用号(System Call Number);(2)系统调用表中相应的表项,即具体的函数地址;(3)对应的具体函数,即系统调用函数体。以getpid()POSIX接口举例如下:(1)系统调用号在文件 include/asm-x86/unistd_32.h中,表现如下:/* * This file contains the system cal原创 2013-11-21 20:20:06 · 891 阅读 · 0 评论 -
<Xen虚拟化技术>第四章---关于系统调用的权限检查
本文参考文章:保护模式对CPL、RPL、DPL的总结在本章,首先开始讲了系统调用过程,系统调用过程中涉及到用户空间和系统空间之间的转换,有关的权限检查也是不可少的。由于跳转的方式有两种:(1)直接转移(far call 及 far jmp);(2)使用call gate 进行控制权的转移;(3)中断门或者陷阱门转移。书上分类分得补清楚,而且也没有说清楚Int 0x80的跳转过程实际上是原创 2013-11-21 19:42:26 · 866 阅读 · 0 评论 -
<Xen虚拟化技术>阅读笔记---第三章 Xen信息页
1、文件/xen/include/public/xen.h2、第一个数据结构:启动信息页strat_info,启动信息页是GuestOS内核启动时,由Xen映射到GusetOS内存空间的一个物理页面,其中包含了GuestOS内核启动所需要的所有信息。代码如下:#define MAX_GUEST_CMDLINE 1024typedef struct start_info { /*原创 2013-11-18 22:25:22 · 1163 阅读 · 0 评论 -
实现随机抽样【随机数生成问题】
参考资料:C语言函数库1、rand()定义: int rand(void);返回值:返回一个伪随机数,该数的范围是:[0,RAND_MAX)2、srand()定义: void srand(unsigned int seed);返回值:该函数是随机数发生器的初始化函数;如果使用相同的种子给rand用,那么rand()会产生相同的伪随机数。常用的原创 2013-09-29 10:15:07 · 1627 阅读 · 0 评论 -
Linux 内核/驱动开发总结
总体来看,需要一个阶段性总结了,因为现在SD卡的调试也进入了卡壳期。大概会出一系列的总结文章,主要涉及的主题在下面列出:1、开发工具:gcc/gdb/vim/ctags2、Makefile和KConfig:linux内核的配置与编译,更好的理解模块化开发3、调试技术:无敌的printf等;注意整体的流程以及与内核的交互;4、常用的shell命令:grep查找特定字符串;fi原创 2013-10-10 10:56:26 · 1052 阅读 · 0 评论 -
调度子系统阅读
1、(1)#define cpu_rq(cpu) (&per_cpu(runqueues,(cpu)))//获取编号为cpu的CPU的就绪队列的首地址(2)#define this_rq() (&__get_cpu_var(runqueues))//取得当前CPU的运行队列(runqueues)(3)#define task_rq(p) cpu_rq(t原创 2013-09-23 14:02:40 · 773 阅读 · 0 评论 -
在编译内核的最后阶段出现sdhci_esdhc_imx_pdata未定义的错误
遇到下面这种错误在网上查找资料后,发现一篇好文,提出了良好的找错误的策略:(1)利用grep命令查看该变量在何处使用;(2)查看相应的头文件是否在Kconfig中被定义且在make menuconfig中被选中我也是这么解决的最后,发现是Kconfig和Makefile中都有相应处理,只是make menuconfig中未选,可能的原因是我今天修改代码时不小心冲掉了选项了吧原创 2013-09-17 20:11:24 · 1243 阅读 · 0 评论 -
全局启动函数start_kernel函数注解
asmlinkage void __init start_kernel(void){ char * command_line; extern struct kernel_param __start___param[], __stop___param[]; smp_setup_processor_id(); /* * Need to run as early as possible原创 2013-09-13 15:58:12 · 1055 阅读 · 0 评论 -
内存域水印值:min_free_kbytes
1、内存域水印值:需要为关键性分配保留的内存空间的最小值;该值保存在全局变量min_free_kbytes中2、内存域水印值的计算由函数init_per_zone_pages_min完成:/* * Initialise min_free_kbytes. * * For small machines we want it small (128k min). For large m原创 2013-09-13 09:35:05 · 9269 阅读 · 0 评论 -
Xen虚拟化技术详解---第四章----申请超级调用
内核驱动程序privcmd负责将位于GuestOS用户空间的超级调用请求传递到GuestOS内核中,与Linux系统的内核驱动程序相同,该操作要在系统调用ioctl()的帮助下完成。关于ioctl()系统调用:在Linux系统中,系统调用ioctl()被认为是对常规系统调用的扩充,它通过一个参数间接地给出具体的操作命令,凡是不适合为之专门设置一个系统调用或分配一个系统调用号的操作,都可以利原创 2013-11-27 20:01:58 · 1114 阅读 · 0 评论 -
linux设备模型与内核中的面向对象思想
linux内核用C语言实现了C++面向对象的大部分特性:封装,继承,多态。在看内核的过程中,开始追寻其中的设计思想,封装、继承、多态。恰好今天又在看Linux设备模型,找了很多资料。总结如下:1、linux设备模型总结:点击打开链接这篇文章对设备模型的讲解比较到位,但是没有图示清楚,如果需要形象理解,则可以参考我的前一篇文章:linux对象系统。在这篇文章的最后,利用pci_registe原创 2013-12-06 11:49:44 · 5308 阅读 · 0 评论 -
Linux“七大蠢”收录
这个系列的文章,前段时间在微信公共平台(阿里技术嘉年华)上看过,写得很好。Linux“七大蠢”之一:万般皆文本Linux“七大蠢”之二:处处有脚本Linux"七大蠢"之三:规律无处寻Linux"七大蠢"之四:配置乱生根Linux“七大蠢”之五:优化遭人恨Linux“七大蠢”之六:编程不用人Linux"七大蠢"之七:程序分又分这个系列的文章,可以配合《UNIX编程艺术》一起来看,转载 2013-12-06 13:25:51 · 1435 阅读 · 0 评论 -
Git和GitHub在线学习资源整理
博客文章GitHub Fundamental电子书GotGitHub原创 2013-10-12 09:11:26 · 3523 阅读 · 0 评论 -
KVM on CubieTruck 原理以及网络性能相关思考
参考资料:Virtio:针对Linux的I/O虚拟化框架原创 2014-08-12 11:46:05 · 1595 阅读 · 0 评论 -
Linux内核学习散知识整理
1、container_of(ptr, type, member) 参考文章:container_of宏原创 2014-08-12 11:30:56 · 943 阅读 · 0 评论 -
学习操作系统和Linux内核的新体会
算起来是第三看内核吧,从源码的细节中爬出来:(1)先拎清楚主要的数据结构,就把握住了骨架;(2)再看每个系统调用的功能的流程是如何围绕上述数据结构展开。举个栗子,块设备驱动层的主要数据结构有:buffer_head,bio,request,request_queue;hd_struct,gendisk,block_device;(3)搞清楚真正发生了什么,硬件和软件是如何配合的。例如,inter3原创 2014-08-21 20:35:25 · 929 阅读 · 0 评论 -
Linux内核:关于中断你需要知道的
1、中断处理程序与其他内核函数真正的区别在于,中断处理程序是被内核调用来相应中断的,而它们运行于中断上下文(原子上下文)中,在该上下文中执行的代码不可阻塞。中断就是由硬件打断操作系统。2、异常与中断不同,它在产生时必须考虑与处理器时钟同步。异常被称为同步中断,例如:除0、缺页异常、陷入内核(trap)引起系统调用处理程序异常。3、不同的设备对应的中断不同,而每个中断都通过一个唯一的数字(中原创 2014-07-21 15:28:30 · 3704 阅读 · 0 评论 -
LinuxKernel优秀博客
1、vanbreaker的专栏2、LinuxKernel Exploration3、DroidPhone的专栏原创 2013-11-14 15:34:05 · 946 阅读 · 0 评论 -
Ubuntu 系统装机指南
1、vim设置2、git配置3、系统性能监视器:Ubuntu安装系统监视器4、编译环境安装:sudo apt-get install build-essential原创 2014-02-23 22:47:35 · 774 阅读 · 0 评论 -
linux设备树的建立过程
为了阐明表示总线、设备和设备驱动程序的各个数据结构之间彼此的关联,它们的注册过程是很有必要的。顺序一定是如下:(1)注册总线---bus_register;(2)注册设备device_register;(3)注册设备驱动程序----bus_add_driver。下文摘自:点击打开链接 现在我们得费劲心思的捋一遍我们的驱动注册代码,以便找到设备树添加的关键部分。我想我又得强调转载 2013-12-06 09:32:50 · 7847 阅读 · 0 评论 -
linux对象系统---kobject, ktype, kset, subsys
本文转自:linux中kobject/ktype/kset/subsys之间的关系随着内核版本的发展,会有一些变化,无论怎样,变化的是形式,不变的是思想! 那么他们之间具有什么关系?那应该不是‘小3‘也不是'小5‘的关系,总之这种关系超越了人们,构成了Linux,是一种"你中有我,我中有你“的关系,其实关系复杂了,语言是难以描述的,不过还是先从文字开始吧。本文基于内核版本l转载 2013-12-05 17:10:25 · 4351 阅读 · 0 评论 -
字符设备的注册与操作
相对于块设备来说,字符设备的使用要简单很多。但是简单的东西,也有很多值得一看的东西。比方说,字符设备,与inode如何关联;在打开字符设备的时候,又是如何层层递进,最终执行相应的从设备的实际例程呢?下面拿Mem.c这个文件下面的例子来分析,该字符设备的主设备号为1,文件为/dev/mem,含义是物理内存。注册:1、chr_dev_init:/* 内存字符设备初始化*/static int原创 2013-12-04 10:40:21 · 1440 阅读 · 0 评论 -
内存管理阅读
1、系统中的内存域,使用枚举常量zone_type来表示:enum zone_type {#ifdef CONFIG_ZONE_DMA /* * ZONE_DMA is used when there are devices that are not able * to do DMA to all of addressable memory (ZONE_NORMAL). The原创 2013-09-12 16:19:46 · 989 阅读 · 0 评论 -
linux驱动开发手记【2】
1、/dev目录下,主设备号和次设备号。ls -l可以通过第一个字母是c或者b区分是字符设备或者是块设备。主设备号标识设备对应的驱动程序。2、分配设备编号:如果我们提前明确知道所需要的设备编号,则使用int register_chrdev_region(dev_t first,unsigned int count,char * name);否则,使用动态分配函数int alloc原创 2013-07-09 15:31:15 · 829 阅读 · 0 评论 -
警告: 隐式声明与内建函数 ‘exit’ 不兼容 解决方案
1 #include 2 #include 3 #include "lib.h" 4 5 int main() 6 { 7 bill("Hello World"); 8 exit(0); 9 } 今天在编译我的一个linux原创 2012-02-23 19:59:19 · 774 阅读 · 0 评论 -
cp命令“-d”参数解释及实例
-d:若源文件为连接文件杜属性,则复制连接文件属性而非文件本身。例如:1、root@ubuntu:/tmp# cp -s bashrc bashrc_slink #建立一个快捷方式root@ubuntu:/tmp# cp -l bashrc bashrc_hlink #建立一个硬连接root@ubuntu:/tmp# ls -l bashrc*-rw-r--r-原创 2012-01-16 15:45:09 · 8741 阅读 · 1 评论 -
Linux下rename和mv命令的学习【有待继续】
刚学习linux的时候,对文件重命名首先想到的就是rename命令,但是按照在windows下对文件重命名的方式试了N多次都没有反应,在网上一搜索,发现很多人都对rename命令知之甚少,甚至有一部分人说linux下没有rename命令,建议大家用mv命令。鉴于此,于是man rename一下,好好的研究了一下它的用法 ,在此对rename命令和mv命令在重命名文件方面做一个比较,有不足之处,希望转载 2012-01-16 16:12:56 · 703 阅读 · 0 评论 -
ubuntu11.10下配置adsl上网
<!--@page {margin:2cm}p {margin-bottom:0.21cm}-->1、准备工作:连接好相关设备及网线。这时面板右侧的网络管理器显示的是网络断开状态,有一个红色的感叹号2、添加拨号:(1)右键单击网络管理器(带红色感叹号的那个东东),选择“编辑连接”,打开网络连接窗口(2)单击“DSL”选项卡,单击“添加”按钮,原创 2012-01-15 21:54:27 · 660 阅读 · 0 评论 -
vim 配置文件 ,高亮+自动缩进+行号+折叠+优化
将一下代码copy到 用户目录下 新建文件为 .vimrc保存即可生效; 如果想所有用户生效 请修改 /etc/vimrc (建议先cp一份)"========================================================== " DesCRiption: 适合自己使用的vimrc文件,for Linux/Windows, GUI/Console转载 2012-01-15 22:42:20 · 769 阅读 · 0 评论 -
嵌入式LINUX核心图书
Linux基础1、《Linux与Unix Shell 编程指南》注:Linux的基本应用,我想首先应该看你安装的Linux发行版的文档。比如我用 RedHat 9.0,虽然老了些,但是资料非常丰富,容易上手。Redhat Linux 9入门手册,配置手册从红联都可以下载到。如果英文好,可以从官方网站下载。基本操作熟悉了,必须要下功夫学好shell。Linux下的所有配置都是通过shell脚本完成的,shell还可以帮助你提高工作效率,在嵌入式Linux中,shell的地位是不可忽视的。<br />C语言转载 2011-04-07 14:54:00 · 586 阅读 · 0 评论 -
C/C++语言写程序时的“段错误”总结
<br /><br />我们在用C/C++语言写程序的时侯,内存管理的绝大部分工作都是需要我们来做的。实际上,内存管理是一个比较繁琐的工作,无论你多高明,经验多丰富,难 免会在此处犯些小错误,而通常这些错误又是那么的浅显而易于消除。但是手工“除虫”(debug),往往是效率低下且让人厌烦的,本文将就"段错误"这个 内存访问越界的错误谈谈如何快速定位这些"段错误"的语句。<br />下面将就以下的一个存在段错误的程序介绍几种调试方法:<br /> 1 dummy_function (void)<br转载 2011-03-31 18:44:00 · 2318 阅读 · 0 评论 -
linux下的计算器bc
<br />1、在命令行下输入bc<br /><br />2、注意看上图最后一个,10/100不是应该是0.1吗?<br /><br />哦,原来默认为输出整数,要输出小数怎么办,用scale=number,其中number为小数的位数<br />额。。。。。。。。。最后<br />再来张好玩到图<br />系统时间穿越了。。。。<br />原创 2011-01-07 08:45:00 · 566 阅读 · 0 评论 -
shell到基本工作过程是怎样到?
<br /> linux系统提供给用户的最重要的系统程序是shell语言命令解释程序。它不属于内核部分,而是在核心之外以用户态方式运行。其基本功能是解释并执行用户键入的各种命令,实现用户与linux核心的接口。系统启动后,内核为每个终端用户建立一个进程去执行shell解释程序。<br /> 基本的执行步骤如下:<br /> 1、读取用户由键盘输入的命令行。<br /> 2、分析命令,以命令名作为文件名,并将其它参数改造为系统调用execve( )内部处理所要求的形式。转载 2011-01-05 10:28:00 · 2214 阅读 · 0 评论 -
系统初启
<br />系统初启 <br />当打开计算机电源以后,计算机就开始初启过程。初启过程的细节与机器的体系结构有关,但对所有的机器来说,初启的目的是共同的:将操作系统的副本读入内存中,建立正常的运行环境。对于Intel i386系列来说,引导过程分为硬件检测、加载引导程序、初始化内核和实现用户登录。 <br />1.硬件检测 <br />当PC启动时,首先CPU进入实模式,开始执行ROM-BIOS起始位置的代码。BIOS首先执行加电自检程序(POST),完成硬件启动,然后对系统中配置的硬件(如内存、硬盘及其它转载 2011-01-04 19:36:00 · 1905 阅读 · 0 评论 -
LINUX实验题目
<br />1.定时执行任务 1)创建用户ttt useradd ttt 2)给ttt设置密码 passwd ttt 3)用户ttt创建定时任务,在/tmp下创建一个新文件 crontab -u ttt -e 进入界面后按照 分 时 日期 月份 星期 touch /tmp/新文件 4)等待事件发生后到相应目录下查看新文件创建时间等是否正确等到时间后查看文件是否创建成功 2.用户权限设置 1)创建3个用户:nihao、tahao、wohao useradd nihao passwd nihao useradd原创 2011-01-04 19:33:00 · 2135 阅读 · 0 评论 -
内部命令和外部命令
UNIX命令有内部命令和外部命令之分。内部命令实际上是shell程序的一部分,其中包含的是一些比较简练的UNIX系统命令,这些命令由shell程序识别并在shell程序内部完成运行,通常在UNIX系统加载运行时shell就被加载并驻留在系统内存中。外部命令是UNIX系统中的实用程序部分,因为实用程序的功能通常都比较强大,所以它们包含的程序量也会很大,在系统加载时并不随系统一起被加载到内存中,而是在原创 2012-02-26 11:04:45 · 487 阅读 · 0 评论 -
new多个文件编程和split单个文件多个窗口编程
new:新开一个文件(横向分割),可同时编辑来两个文件;vnew:纵向分割split:同一个文件中(横向分割),针对同一个文件vsplit:纵向分割shift+zz:结束Ctrl+ww:变换窗口原创 2012-04-19 20:06:10 · 609 阅读 · 0 评论