Linux lock_kernel()函数的分析。
这只是暂时的记录,以后会把它归类到start_kernel()函数的分析。在分析之前,我先要说说几个概念。
内核抢占:在2.6内核加入了抢占的能力,就是说调度程序有办法在一个内核级的任务正在执行的时候从新调度。但是必须要保证重新调度要安全,这样就要靠一把锁来保证了。
计数器(thread_info.[reempt_count):其实也可以把他叫成锁的,它的初值定义为0,每当使用锁的时候加1.
好了,我们现在来看看lock_kernel()的具体代码啦(2.6.10版本的)
#ifndef __LINUX_SMPLOCK_H
#define __LINUX_SMPLOCK_H
#include <linux/config.h>
#include <linux/sched.h>
#include <linux/spinlock.h>
#ifdef CONFIG_LOCK_KERNEL
#define kernel_locked() (current->lock_depth >= 0)
extern int __lockfunc get_kernel_lock(void);
extern void __lockfunc put_kernel_lock(void);
/*
* Release/re-acquire global kernel lock for the scheduler
*/
#define release_kernel_lock(tsk) do { \
if (unlikely((tsk)->lock_depth >= 0)) \
put_kernel_lock(); \
} while (0)
/*
* Non-SMP kernels will never block on the kernel lock,
* so we are better off returning a constant zero from
* reacquire_kernel_lock() so that the compiler can see
* it at compile-time.
*/
#ifdef CONFIG_SMP
#define return_value_on_smp return
#else
#define return_value_on_smp
#endif
static inline int reacquire_kernel_lock(struct task_struct *task)
{
if (unlikely(task->lock_depth >= 0))
return_value_on_smp get_kernel_lock();
return 0;
}
extern void __lockfunc lock_kernel(void) __acquires(kernel_lock);
extern void __lockfunc unlock_kernel(void) __releases(kernel_lock);
#else
#define lock_kernel() do { } while(0)
#define unlock_kernel() do { } while(0)
#define release_kernel_lock(task) do { } while(0)
#define reacquire_kernel_lock(task) 0
#define kernel_locked() 1
#
相关文档:
软件安装命令
1. tar
tar 命令的基本用法为:
tar [选项] 文件名
常用的选项包括
-c 创建一个新的档案文件
-t 查看档案文件的内容
-x 分解档案文件的内容
-f 指定档案文件的名称
-v 显示过程信息
-z 采用压缩方式
举例
1 tar -czf oracle.tar.gz /u01/app/oracle /etc/oratab /home/oracl ......
一.去除embedded linux 的开机光标:
在内核的当前目录进入到drivers/video/console/fbcon.c文件
将static void fb_flashcursor(void *private) 里的内容注释掉,使之变成空函数
二.设置LINUX内核启动LOGO
(1)让内核支持启动LOGO
在内核目录中 ......
解压几种文件格式
wzwz.tar.gz——tar zxvf wzwz.tar.gz
wzwz.tar.bz2——tar jxvf wzwz.tar.bz2
wzwz.rpm——rpm -ivh wzwz.rpm
cpio——cpio -idm < wzwz.img
生成initrd.img
dd if=/dev/zero of=/home/wzwz.img bs=1M count=10
mke2fs -F -v wzwz.i ......
1.Vi及其运行模式
Vi是“Visual interface”的简称。可以执行输出、删除、查找、替换、块操作等众多文本操作
练习
cp /etc/passwd /tmp/ 拷贝一个文件
连续按dd 可以删除一行
连续按oo 可以插入一行
按一个O 可以在光标上面插入一行
2.重定向
标准输入、输出
......