Days_With_Linux_Comment
<linux - 0.12 内核完全剖析>按照章节整理好的学习笔记,带标签便于查询复习
JasonLeaster
Doing is better than saying.
展开
-
《linux 内核完全剖析》 include/asm/io.h
include/asm/io.h #define outb(value,port) \__asm__ ("outb %%al,%%dx"::"a" (value),"d" (port))//宏定义outb用汇编实现了在端口地址port处写入值value//使用的寄存器是al,一个byte长度,而端口port使用的是2byte长度地址来标记的寄存器,注意这里寄存器的使用原创 2014-06-29 14:13:30 · 3546 阅读 · 0 评论 -
《linux 内核完全剖析》 keyboard.S 部分代码分析(key_map)
keyboard.S 部分代码分析(key_map)keyboard中间有这么一段,我一开始没看明白,究竟啥意思key_map: .byte 0,27 .ascii "1234567890-=" .byte 127,9 .ascii "qwertyuiop[]" .byte 13,0 .ascii "asdfghjkl;'" .byte '`,0 .ascii原创 2014-05-11 21:25:21 · 2043 阅读 · 0 评论 -
《linux 内核完全剖析》 chapter 8 内核代码
chapter 8 内核代码8.1.1中断处理程序traps.c#define get_seg_byte(seg,addr) ({ \ //取seg中addr处1byteregister char __res; \__asm__("push %%fs;mov %%ax,%%fs;movb %%fs:%2,%%al;pop %%fs"原创 2014-05-08 20:45:17 · 1608 阅读 · 0 评论 -
《linux 内核完全剖析》 vsprintf.c 代码笔记
vsprintf.c 代码笔记你/* * linux/kernel/vsprintf.c * * (C) 1991 Linus Torvalds *//* vsprintf.c -- Lars Wirzenius & Linus Torvalds. *//* * Wirzenius wrote this portably, Torvalds fucked原创 2014-05-08 16:06:05 · 2877 阅读 · 0 评论 -
《linux 内核完全剖析》 sys.c 代码分析
sys.c 代码分析 setregid/* * This is done BSD-style, with no consideration of the saved gid, except * that if you set the effective gid, it sets the saved gid too. This * makes it possib原创 2014-05-08 14:53:51 · 2040 阅读 · 0 评论 -
《linux 内核完全剖析》 fork.c 代码分析笔记
fork.c 代码分析笔记verifiy_arealong last_pid=0; //全局变量,用来记录目前最大的pid数值void verify_area(void * addr,int size) // addr 是虚拟地址 ,size是需要写入的字节大小{ unsigned long start; start = (unsigned lo原创 2014-05-08 12:13:58 · 4375 阅读 · 0 评论 -
"I ask you, have you ever known what it is to be an orphan?"
/* * Determine if a process group is "orphaned", according to the POSIX * definition in 2.2.2.52. Orphaned process groups are not to be affected * by terminal-generated stop signals. Newly orp原创 2014-05-07 12:25:05 · 1979 阅读 · 0 评论 -
《linux 内核完全剖析》 exit.c 代码分析笔记
exit.c 代码分析笔记 release 释放进程的函数release() 主要根据指定进程的任务数据结构指针,在任务数组中删除指定的进程指针,释放相关内存页,并立刻让内核重新调度进程的运行。void release(struct task_struct * p) //释放p指向的进程{ int i; if (!p) //常规检测原创 2014-05-07 18:37:04 · 2433 阅读 · 0 评论 -
《linux 内核完全剖析》 signal.c 代码分析笔记
signal.c 代码分析笔记int sys_sgetmask()// 获取当前进程阻塞的信号{ returncurrent->blocked;} int sys_ssetmask(int newmask) //设置当前进程阻塞信号,确保SIGKILL 和SIGSTOP不被阻塞{ int old=current->原创 2014-05-07 10:14:50 · 2343 阅读 · 0 评论 -
《linux 内核完全剖析》sched.c sched.h 代码分析笔记
首先上header file#ifndef _SCHED_H#define _SCHED_H#define HZ 100#define NR_TASKS 64#define TASK_SIZE 0x04000000#define LIBRARY_SIZE 0x00400000#if (TASK_SIZE & 0x3fffff)#error "TASK_原创 2014-05-07 09:49:26 · 11388 阅读 · 1 评论 -
《linux 内核完全剖析》 mktime.c
tm结构体的定义在time.h里面struct tm { int tm_sec; int tm_min; int tm_hour; int tm_mday; int tm_mon; int tm_year; int tm_wday; int tm_yday; int tm_isdst;};/*原创 2014-05-06 13:48:39 · 1705 阅读 · 0 评论 -
《linux 内核完全剖析》chapter 13 内存管理 (不含swap.c)
我估计理论打基础砸了差不多一个星期的时间,原创 2014-05-06 11:24:06 · 2021 阅读 · 0 评论 -
《linux 内核完全剖析》get_free_page(void)【嵌入式汇编复习看这里】
unsigned long get_free_page(void){register unsigned long __res asm("ax");repeat: __asm__("std ; repne ; scasb\n\t" "jne 1f\n\t" "movb $1,1(%%edi)\n\t" "sall $12原创 2014-05-05 15:34:48 · 2819 阅读 · 0 评论 -
《linux 内核完全剖析》编译linux 0.12 内核 Ubuntu 64bits 环境
我×。。。终于好了,大概3 4个小时吧。。。各种毛刺问题。终究还是闯过来了。。。。ubuntu2@ubuntu:~/Downloads/linux-0.00-050613/linux-0.00$ makeld -s -x -M head.o -o system > System.mapdd bs=32 if=boot of=Image skip=116+0 records i原创 2014-05-04 18:06:11 · 2781 阅读 · 2 评论 -
《linux 内核完全剖析》上帝为什么是右移20,而不是22! dir = (unsigned long *) ((from>>20) & 0xffc)
在memory.c里面有这么一段代码。为了其中的一句话,让我内牛满面啊! dir = (unsigned long *) ((from>>20) & 0xffc)int free_page_tables(unsigned long from,unsigned long size){ unsigned long *pg_table; unsigned long原创 2014-05-04 11:01:22 · 3067 阅读 · 3 评论 -
《linux 内核完全剖析》 void free_page() 分析
#define PAGE_SIZE 4096/* these are not to be changed without changing head.s etc */#define LOW_MEM 0x100000extern unsigned long HIGH_MEMORY;#define PAGING_MEMORY (15*1024*1024)#define PAGING_PAG原创 2014-05-04 10:22:13 · 3093 阅读 · 0 评论 -
《linux 内核完全剖析》 笔记 CODE_SPACE 宏定义分析
在memory.c里面,遇到一个宏定义,如下:#define CODE_SPACE(addr) ((((addr)+4095)&~4095) < \current->start_code + current->end_code)看的第一眼,不知道,第二眼,还是不知道,纠结了半天还是不知道。睡了一晚,今天早上再看,嘿嘿,居然看懂了。。。这个宏定义用于判断给定的addr线原创 2014-04-30 10:11:54 · 2118 阅读 · 1 评论 -
《linux 内核完全剖析》 由逻辑地址转换成线性地址代码分析 get_base get_limit 代码分析笔记
一开始由这段代码引发的纠结get_base(current->ldt[1])下面是各个相关的代码,摘自不同的header files。。。current是指向当前task的指针struct desc_struct ldt[3];struct desc_struct {unsigned long a,b;} ;#define _get_原创 2014-04-29 10:11:14 · 1882 阅读 · 2 评论 -
《linux 内核完全剖析》 chapter 7 初始化程序
初始化程序7.1 main.c 程序 图中,高速缓存的部分还要扣除显存和ROM BIOS占用的部分。告诉缓冲区是用于磁盘等块设备临时存放数据的地方,以1K字节为一个数据单位。init().函数的功能可分为四个部分安装根文件系统显示系统信息运行系统初始资源配置文件rc中的命令执行用户登录程序shell程序原创 2014-04-27 18:38:59 · 1356 阅读 · 0 评论 -
《linux 内核完全剖析》 chapter 5 Linux内核体系结构
Linux内核体系结构原创 2014-04-26 23:11:38 · 2008 阅读 · 0 评论 -
《linux 内核完全剖析》 chapter 4 80x86 保护模式极其编程
80x86 保护模式极其编程 首先我不得不说,看这张真的很纠结。。。看了半天,不知道这个东西能干嘛,我感觉唯一有点用的就是对于内存映射的理解。。。我如果不在底层给80x86写汇编的话,我真不知道这章能对我有什么用。。。还是留下自己觉得重要的理解了的笔记吧。。。4.1.1标志寄存器--EFLAGST原创 2014-04-23 17:16:14 · 2006 阅读 · 0 评论 -
《linux 内核完全剖析》 chapter 3 内核编程语言和环境
内核编程语言和环境原创 2014-04-22 15:02:32 · 1647 阅读 · 0 评论 -
《linux 内核完全剖析》 chapter 2 微型计算机组成结构
微型计算机组成结构原创 2014-04-20 11:40:47 · 2467 阅读 · 0 评论