当前位置:文档之家› Linux内核学习起步

Linux内核学习起步

Linux内核学习起步
Linux内核学习起步

Linux 内 核 学 习 起 步

albcamus

Last Update : 2007年12月06日

1, 编译内核

=========================

1.0 获取内核压缩

------------------

在https://www.doczj.com/doc/9213401243.html,/pub/linux/kernel/v2.6/能看到一系列的文件,如ChangeLog-2.6.xx、linux-2.6.xx.tar.{gz|bz2}和patch-2.6.xx.{gz|bz2}, 你应该下载

linux-2.6.23.tar.bz2这样的压缩包。

1.1 找一个旧的.config作参考

-------------------------------

安装内核开发包(以FC8为例,是kernel-devel-2.6.23.1-42.fc8.i686.rpm),

则/lib/modules//build目录下会有.config文件。

# cd linux-2.6.24-rc3

# cp /lib/modules/2.6.23.1-42.fc8/build/.config .

1.2 配置、编译和安装

-----------------------

配置:

# make menuconfig/gconfig/xconfig/oldconfig/defconfig/allyesconfig/allmodconfig FYI: 一般用menuconfig比较多,如果你喜欢GUI风格,也可以选择基于Qt的xconfig或

基于Gtk+的gconfig。

FYI: 可以用O=指定编译生成的文件放在哪个目录. 举例来说,

如果我的内核源代码目录是/usr/src/linux-2.6.23,编译内核时指定了:

make O=/home/arc/build/linux-2.6.23

那么/lib/modules/2.6.23下的`source'和`build'这两个符号链接就分别指

向了源代码和目标代码目录:

# ls -l /lib/modules/2.6.23/source

lrwxrwxrwx 1 root root 21 11-22 13:35 /lib/modules/2.6.23/source -> /usr/src/linux-2.6.23

# ls -l /lib/modules/2.6.23/build

lrwxrwxrwx 1 root root 28 11-22 13:35 /lib/modules/2.6.23/build -> /home/arc/build/linux-2.6.23

编译:

# make

FYI: V=1 /*verbose模式,把每一部执行的命令都打印出来。

*一个小技巧就是,把标准输出重定向到一个文件中,

*这样以后查找模块之间的依赖关系就很方便了

*/

C=1 /*需要安装sparse程序,进行严格的静态C语法检查。

*一般开发者会通过它来预防BUG

*/

安装:

# make modules_install

# make install

FYI : 正常情况下make install会根据你机器的配置为你定制initrd文件,并更新

grub.conf文件中的内容。但如果重新引导时发现无法启动,注意手工mkinitrd。

例如:

# mkinitrd -v –preload libata.ko –with=ext3 /boot/initrd-2.6.24-rc3.img 2.6.24-rc3

其中—preload指定的模块会在/etc/modprobe.conf之前加载,而--with指定的模块会在这之后加载。

1.3 文档

---------

# make htmldocs //你也可以不用htmldocs指令HTML格式,而指定pdfdocs或

//psdocs

# make mandocs //为kernel API生成man手册

# make installmandocs /*将kernel API的手册页安装到man程序能找到的

*目录中,这样就可以man copy_from_user了

*/

FYI: 执行make htmldocs/pdfdocs/psdocs之后,在O=指定的目录(如果没使用O=则是

源代码目录)的D ocumentation/D ocBook/下,会生成几份很重要的文档:

kernel api : 内核开发的AP I手册

usb : U S B host端的AP I手册

gadget : U S B device端的AP I手册

kernel locking : 内核加锁的H O WT O文档

kernel hacking: 内核开发的一些注意事项

FYI: 内核源代码目录的D ocumentation目录:

kernel-parameter.txt : 内核参数,加在一个grub entr y的kernel指令后面

files y stems/vfs.txt : Linux虚拟文件系统的深入介绍

memor y-barriers : 关于barriers的文档

Coding S t y le : 内核编码的规范

等等.

图1.1 menuconfig

图1.2 xconfig

图1.3 gconfig

2, 浏览代码

=====================

2.1 vim + ctags + cscope

2.1.1 编译ctags需要的tags文件:

# make AR C H=x86 tags

FYI: AR C H=的意思是,除了指定的体系结构外,不索引其他体系结构相关的代码.

FYI: 2.6.24之前,用i386指代32位的x86处理器,用x86_64指代64位的x86处理器。 但 在2.6.24中这2者即将合并,统称为x86.

2.1.2 编译cscope程序需要的cscope.out文件:

# make AR C H=x86 cscope

2.1.3 在Vim中用ctags浏览

:ts do_fork //tag select 效果等同于光标停在do_fork上,按Ctrl-]。

//如果想返回原来的位置,Ctrl-T

:tn //tag next

:tp //tag previous

:tf //tag first

:tl //tag last

FYI: 安装Vim的taglist插件,浏览更方便。 又,~/.vimrc中控制number: “added by albcamus

function! TlistWrapper2 ()

Tlist

if winnr('$') >= 2 " winnr() return the number of current window

" while winnr('$') returns the number of all windows

set nonu

else

set nu

endif

endfunction

command! -nargs=0 List call TlistWrapper2()

map :List:

则可以按F1键来调用taglist。

2.1.4 在Vim中用cscope浏览

:cs add cscope.out#添加一个connection,浏览内核时经常发现cscope链接断开

可以调用:cs a cscope.out

:cs show#显示所有connections

:cs kill <#>#杀死第#号connection,第#号就是:cs show显示出来的

:cs reset#reset所有connections

:cs find c|d|e|f|g|i|s|t

解释:

c查找name被哪些函数调用

d查找name调用了哪些函数

e egrep句型

f查找名为name的文件

g查找name的定义

i查找#include本name的文件

s查找name这个C符号

t查找何处对name赋值

对Linux内核来说,如果既有tags文件,又有cscope.out文件,则Vim中:set cst 意味着使用cscope风格的^],也就是:tag命令。 于是:

如果想用ctags找到do_I R Q:

:ts do_I R Q

如果想用cscope找到do_I R Q:

:ta do_I R Q

FYI: 可以在~/.vimrc中自定义命令,这样就不必每次都输入符号名:

nmap g :cs find g =expand("")

nmap c :cs find c =expand("")

nmap s :cs find s =expand("")

nmap t :cs find t =expand("")

nmap e :cs find e =expand("")

nmap f :cs find f =expand("")

nmap i :cs find i ^=expand("")$

nmap d :cs find d =expand("") 这样,当你在Vim中把光标挪到字符串do_fork上,按Ctrl-\c(先按Ctrl-\然后按c),cscope就会列出所有调用了do_fork函数的地方。

FYI: G N U Global程序也不错。 对喜爱E macs编辑器的朋友,还可以用etags和xcscope来替代。 喜欢S ource Insight的朋友也可以常识一下kscope,它的界面和S I很类似。

kscope依赖于KDE的库,如果你用gnome作窗口管理器,也得安装了KDE才能安装kscope。 使用kscope之前需要安装ctags、cscope和dot程序(dot在graphviz包中)。

kscope抓图:

2.2 lxr - Linux Cross R eferrence

我一般都只在网上浏览:

http://lxr.linux.no/

https://www.doczj.com/doc/9213401243.html,/~q i y ong/lxr/source/

3. 内核相关的图书==================================

入门推荐: LKD2 - 《Linux内核设计与实现-第2版》

从入门开始,介绍了诸如中断、系统调用、虚拟文件系统、同步与互斥、

内存管理、进程控制等方面,内容比较浅显易懂,是入门的好书。

优点: 适合入门 (个人认为,没有比L KD2更优秀的内核入门图书)

缺点: 内容不够深入,覆盖面不广。(对高手来说估计就像休闲材料)

3.1 UL K3 - 深入理解Linux内核-3rd

一本很全面的Linux内核原理书。 书中以2.6.11为示例版本,着重讲述了

x86平台的Linux内核实现。

优点: 深入,全面

缺点: N/A

我觉得看完UL K3就是高手了:) 而且由于书中着重介绍了X86体系结构,也称得上半个x86专家了。

3.2 《Linux内核源代码情景分析》

以2.4.0为例讲解,注重代码级别的剖析,对中断、内存管理、文件系统、

SMP、P CI和U S B、I P C的讲解都是代码级别的深入细致。

优点: 深入

缺点: 针对的内核版本较旧,且每个「情景」都很长,不容易坚持读完。

FYI : 新手不要从《情景分析》开始学习内核,这样只会增长你的学习周期。

3.3 L DD3 - Linux设备驱动程序-3rd

L DD3写的很精彩。 但如果要学会写具体的驱动程序,还是得参照硬件的

datasheet,读一个内核中现成的驱动程序。

FYI : 内核中自带的驱动程序skeleton:

drivers/net/pci-skeleton.c和drivers/usb/usb-skeleton.c,分别是为P CI/U S B

驱动程序员提供的参考代码。

3.4 现代体系结构上的Unix系统 - 内核程序员的SMP和Caching技术

这本书着重讲解各种体系结构上的Unix实现注意事项,e.g. SMP的同步与互斥、

Cache一致性问题。

优点: 作者知识面非常广,原理讲得很清楚。

缺点: 94年的书,比较旧

3.5 Intel &AMD C P U 参考手册

最好带着问题有针对性的去读Intel &AMD的手册。

4, 第一个模块: Hello Kernel

============================

4.1 代码

--------

# cat M akefile

ifneq ($(KERNELRELEASE),)

obj-m := hello.o

else

KBUILD := /lib/modules/`uname -r`/build

modules:

make -C $(KBUILD) M=$(shell pwd) modules clean:

rm -f *.o *~ core .depend .*.cmd *.ko *.mod.c

rm -rf .tmp_versions

endif

# cat hello.c

#include

#include

#include

MODULE_LICENSE("GPL");

MODULE_DESCRIPTION("The hello world demo module");

MODULE_AUTHOR("albcamus");

static int __init hello_init(void)

{

printk("Hello Kernel!\n");

return 0;

}

static void __exit hello_exit(void)

{

printk("Bye!\n");

}

module_init(hello_init);

module_exit(hello_exit);

4.2 编译、加载和查看

--------------------

编译:

# make

加载

# insmod ./hello.ko

查看:

# dmesg |tail -1

H ello K ernel!

卸载:

# rmmod hello

FYI : 接下来做什么? 在H ello world之后,有很多可以练习的小模块可以做, 例如截获系统调用表(这个最好只拿来玩),写一个dumm y字符设备驱动

程序,添加一个系统调用,等等。

(T B D: 如果有时间,就讲intercept-execve模块)

5, 内核相关的网络资源

==========================================

https://www.doczj.com/doc/9213401243.html,

- git trees

- bugzilla

- L KM L (和其他的mailing list)

FYI: 两个新闻组 comp.os.linux.development.s y stem (讨论linux内核程序设计),

和fa.linux.kernel(L KM L的U SENET版)

新闻组可以用evolution/thunderbird等订阅,也可以在https://www.doczj.com/doc/9213401243.html, 访问。

https://www.doczj.com/doc/9213401243.html,

Linux和B SD内核的技术新闻。 如果没时间跟踪L KM L,那么经常浏览kerneltrap是 个好主意。

https://www.doczj.com/doc/9213401243.html,

Linux weekl y news

https://www.doczj.com/doc/9213401243.html,

从1999年开始,积累了大量的高质量内核技术文档资源。

https://www.doczj.com/doc/9213401243.html,

积累壮大中。 有很多高手活跃,如zx_wing、pupp y love、daemeon等。

https://www.doczj.com/doc/9213401243.html,/developerworks/cn/views/linux/articles.j sp?view_b y=search&search_b y= %E5%86%85%E6%A0%B8

ibm developers works网站有很多关于内核的文档,大都写得通俗易懂。

https://www.doczj.com/doc/9213401243.html,/mailman/listinfo/linux-kernel

由Li Yang @ freescale维护,活跃着很多在K ernel开发领域活跃的华人,

如H erbert X u,M ingming Cao, Br y an W u,S haohua Li, Yanmin Z hang等都有参与,此外还有各个社区的高手如CLF的wheelz、daemeon、zhllg等。

该社区有翻译的内核文档,还有Intel O T C的Linux A C P I项目。

6, 其他的知识

=========================

在学习Linux内核时,我们经常发现很多内核之外的知识要掌握,否则就会成为

学习之路上的绊脚石。 大体上来说,各个领域都有它的特定知识需要掌握,例如

要学习Linux内核的网络协议栈实现,就不可能不学习T C P/I P; 要学习Linux是如 何管理物理内存,就不可能不学习某个C P U的内存管理机制。 等等。

这里只说一点: GCC的C扩展 和 inline ASM。

GCC的C扩展:

$ info gcc 'c e'

I N LI NE ASM(针对i386):

《情景分析》第一章讲解inline ASM比较透彻。 另外有两篇很好的文档:

https://www.doczj.com/doc/9213401243.html,/gferg/ldp/GCC-Inline-A ssembl y-H O WT O.html

https://www.doczj.com/doc/9213401243.html,/group/muc.lists.linux-

kernel/browse_thread/thread/ca8860dd41ddd42b

针对x86-64的inline汇编和i386区别不大。

7, 内核调试

=====================

7.1 printk

朴素的printk永远是最受欢迎的。

缺点: 有时BUG导致直接reboot了,printk的内容甚至都看不到。 不过没关系, 我们可以用console=/dev/tt yS0把console的输出定向到串口,在另一端 接收;也可以用netconsole(详见D ocumentation/networking/netconsole.txt)

优点: 随时随地可用。

FYI: 使用GCC或C99的可变参数宏包裹kprintk

C99方式:

=======

#define MYDEBUG

#ifdef MYDEBUG

#define dbg_print(fmt, ...) \

printk("%s-%d: "fmt, __FILE__, __LINE__, ##__VA_ARGS__);

#else

#define dbg_print(fmt, ...) do {} while (0)

#endif

GCC方式:

=======

#define MYDEBUG

#ifdef MYDEBUG

#define dbg_print(fmt, args...) \

printk("%s-%d: "fmt, __FILE__, __LINE__, ##args);

#else

#define dbg_print(fmt, args...) do {} while(0)

#endif

然后就可以使用:

dbg_print("T his is a debug messge, i = %d, and string is %d\n", i, str);

7.2 kdb

由S GI公司开发的一系列补丁。

https://www.doczj.com/doc/9213401243.html,/pro j ects/kdb/

优点: 更新很快,基本能和官方内核同步。 稳定。

缺点: 只能做到汇编级别的源代码单步,不能做到C代码单步。

7.3 kgdb

lins y s公司开发的一系列补丁。 Linux内核维护者A ndrew M orton就使用它。

优点: C源代码级别的单步。

缺点: BUG较多,需要串口,两台机器。 免费版本支持的内核版本很少。

FYI : 这个问题可以规避:

a), V MW are中可以指定虚拟机的串口为FIFO文件,从而两台虚

拟机实现"串口"互联;

b), 较新的kgdb已经支持kgdboe - Over E thernet. 只要以太

网卡驱动程序支持NETP OLL即可。

FYI : kgdb即将被合并到官方内核中,不过最早也得是2.6.25.

FYI : 比lins y s和sourceforge要全的一个地方:

https://www.doczj.com/doc/9213401243.html,/pub/linux/kernel/people/agk/patches/2.6/

另A ndrew M orton的-mm tree中自带kgdb:

https://www.doczj.com/doc/9213401243.html,/pub/linux/kernel/people/akpm/patches/2.6/

7.4 kprobes/s y stemtap

kprobes自2.6.9加入到官方内核中。

s y stemtap是由redhat和Intel等公司开发的调试工具,类似于S olaris的DT race。 它基于kprobes。

kprobes

优点:几乎内核中的任何地方都可以插入监测点. 而且可以使用它来截获那些不导出的 符号(只要在kalls y ms中有)

缺点:N/A

s y stemtap:

下载:

git clone git://https://www.doczj.com/doc/9213401243.html,/git/s y stemtap.git

优点:用户态,功能强大

缺点:需要学习一门新的语言(stap)

文档:

主页:

https://www.doczj.com/doc/9213401243.html,/s y stemtap/documentation.html

使用s y stemtap调试内核:

https://www.doczj.com/doc/9213401243.html,/developerworks/cn/linux/l-s y stemtap/

Linux下的一个全新的性能测量和调试诊断工具s y stemtap,第3部分:

https://www.doczj.com/doc/9213401243.html,/developerworks/cn/linux/l-cn-s y stemtap3/

7.5 V MW are workstation 6.x

V MW are workstation在VC P U中实现了gdb stub

优点: 简单(不需要串口、不需要多台机器),C源代码单步.

缺点: 并不针对Linux系统,不能针对线程栈做分析。 学习意义大于工程意义。

文档:

https://www.doczj.com/doc/9213401243.html,/u/548/showart.php?id=282575

图:WS6.0

8, 现代硬件: ARCH & DRIVER =========================================================

8.1 现代X86 C P U

Intel 64 and I A 32 C P U M anuals:

https://www.doczj.com/doc/9213401243.html,/products/processor/manuals/index.htm

AMD C P U M anuals:

https://www.doczj.com/doc/9213401243.html,/devguides.j sp

一些Linux支持(或需要更好地支持)的现代X86 C P U的特性:

多处理器: SMP,同步和互斥,AP IC

内存管理: PAE,PSE,MTRR/PAT, Cache/T LB, x86-64,N U MA

系统调用: int 0x80, s y senter/s y sexit, s y scall/s y sret

电源管理: A C P I

-> 电源管理

-> MPS

-> P CI I R Q R outing

-> PNP

-> E820

扩展指令: MMX,SSE/SSE2/SSE3/SSE4, 3DN ow!

安 全 : NX

虚拟机 : V MX(Intel V T),S V M(AMD-V)

Linux内核修改与编译图文教程

Linux 内核修改与编译图文教程 1

1、实验目的 针对Ubuntu10.04中,通过下载新的内核版本,并且修改新版本内核中的系统调用看,然后,在其系统中编译,加载新内核。 2、任务概述 2.1 下载新内核 https://www.doczj.com/doc/9213401243.html,/ 2.2 修改新内核系统调用 添加新的系统调用函数,用来判断输入数据的奇偶性。 2.3 进行新内核编译 通过修改新版内核后,进行加载编译。最后通过编写测试程序进行测试 3、实验步骤 3.1 准备工作 查看系统先前内核版本: (终端下)使用命令:uname -r 2

3.2 下载最新内核 我这里使用的内核版本是 3.3 解压新版内核 将新版内核复制到“/usr/src”目录下 在终端下用命令:cd /usr/src进入到该文件目录 解压内核:linux-2.6.36.tar.bz2,在终端进入cd /usr/src目录输入一下命令: bzip2 -d linux-2.6.36.tar.bz2 tar -xvf linux-2.6.36.tar 文件将解压到/usr/src/linux目录中 3

使用命令: ln -s linux-2.6.36 linux 在终端下输入一下命令: sudo apt-get install build-essential kernel-package libncurses5-dev fakeroot sudo aptitude install libqt3-headers libqt3-mt-dev libqt3-compat-headers libqt3-mt 4

公共管理学基础知识

公共管理学 第一讲公共管理学概论 问题: 1.公共管理与私营部门管理之间的区别。 2.公共管理学对传统行政学的突破。 3.公共管理学产生的时代条件。 4.公共管理学的内涵。 5.公共管理学在中国发展中的地位。 一、公共管理学的内涵。 (一)公共管理学的核心问题是如何处理“公共物品”和“公共事物”。 “公共物品”是属于大众所有的物品。 “公共物品”的特性: 1)非竞争性。是指人个消费物品或事物在由一个人消费的时候,并不影响和减少其他人的消费。 2)非排他性。是指阻止一个人的消费享用该产品,代价是非常大的。 “公共物品”是指涉及社会公众整体的生活质量和公共利益的一系列活动以及这些活动的实际结果。 (二)管理。是指在一定的环境之中,管理的主体为了达到特定的目的而用一定的职能和手段 对管理的客体加以调节控制的过程。 公共管理。是指政府为代表的公共部门依法通过对社会公共事物的管理,以保障和增进 社会公众利益的职能活动。 公共管理有五个内涵。 1)公共的主体是政府和其他公共部门而不是私人或其他组织。 2)公共管理对象是公共事物。公共事物的特征有:a.公共事物与公共利益有直接关系; b.公共事物管理的受益对象是社会公众。 3)公共管理是永恒存在的。具体的内容随着时代的变迁而调整。 4)公共管理来自于民众的授权并负有直接的社会责任,因此必须依法进行,并且工作 绩效不能简单以利润或效率作为标准。 5)公共管理具有公共性决定了社会公众对公共管理部门拥有更多的制约权。 二、公共管理的具体类型。“三分法”。a.公共政策。是政府制定的,以便于管理。b.政府管理。 处理公共事物,提供公共产品和服务。包括行政机关,立法机关,司法机关等。c.非政府组 织管理。是指除政府门部外其他公共部门处理公共事物,提供产品和服务的活动。 公共管理学。是一门运用包括管理学,经济学,政治学,在内的多学科的理论和方法;研究公共管理部门和公共管理过程及其规律的科学;是关于促进以政府为核心的公共组织,更有效的提供公共物品和公共服务以霎时和公平分配社会公共利益的知识体系。 三、公共管理学的特点。 1.公共管理学是一个整合的概念。延续了公共行政和公共政策方面的内容,以及企业管理方面 的内容。 2.公共管理学在不改变公共部门公共性的情况下,将私部门的管理手段和方法运用于公部门。 3.公理管理重视与外界环境关系,强调以最高领导者的战略设计和政策设计为核心。 4.公共管理并不等于政府管理,而是意味着一种新的治理方式。 5.公共管理强调的是价值调和与责任。“效率,效能,公平,经济。” 6.公共管理关注和重视的是政府的改革与再造。建立服务型政府,比如电子,生态,高效及法 制等。

如何自行编译一个Linux内核的详细资料概述

如何自行编译一个Linux内核的详细资料概述 曾经有一段时间,升级Linux 内核让很多用户打心里有所畏惧。在那个时候,升级内核包含了很多步骤,也需要很多时间。现在,内核的安装可以轻易地通过像 apt 这样的包管理器来处理。通过添加特定的仓库,你能很轻易地安装实验版本的或者指定版本的内核(比如针对音频产品的实时内核)。 考虑一下,既然升级内核如此容易,为什么你不愿意自行编译一个呢?这里列举一些可能的原因: 你想要简单了解编译内核的过程 你需要启用或者禁用内核中特定的选项,因为它们没有出现在标准选项里 你想要启用标准内核中可能没有添加的硬件支持 你使用的发行版需要你编译内核 你是一个学生,而编译内核是你的任务 不管出于什么原因,懂得如何编译内核是非常有用的,而且可以被视作一个通行权。当我第一次编译一个新的Linux 内核(那是很久以前了),然后尝试从它启动,我从中(系统马上就崩溃了,然后不断地尝试和失败)感受到一种特定的兴奋。 既然这样,让我们来实验一下编译内核的过程。我将使用Ubuntu 16.04 Server 来进行演示。在运行了一次常规的 sudo apt upgrade 之后,当前安装的内核版本是 4.4.0-121。我想要升级内核版本到 4.17,让我们小心地开始吧。 有一个警告:强烈建议你在虚拟机里实验这个过程。基于虚拟机,你总能创建一个快照,然后轻松地从任何问题中回退出来。不要在产品机器上使用这种方式升级内核,除非你知道你在做什么。 下载内核 我们要做的第一件事是下载内核源码。在 Kernel 找到你要下载的所需内核的URL。找到URL 之后,使用如下命令(我以 4.17 RC2 内核为例)来下载源码文件: wget https://git.kernel/torvalds/t/linux-4.17-rc2.tar.gz

如何安装Linux内核源代码

如何获取Linux内核源代码 下载Linux内核当然要去官方网站了,网站提供了两种文件下载,一种是完整的Linux 内核,另一种是内核增量补丁,它们都是tar归档压缩包。除非你有特别的原因需要使用旧版本的Linux内核,否则你应该总是升级到最新版本。 使用Git 由Linus领头的内核开发队伍从几年前就开始使用Git版本控制系统管理Linux内核了(参考阅读:什么是Git?),而Git项目本身也是由Linus创建的,它和传统的CVS不一样,Git是分布式的,因此它的用法和工作流程很多开发人员可能会感到很陌生,但我强烈建议使用Git下载和管理Linux内核源代码。 你可以使用下面的Git命令获取Linus内核代码树的最新“推送”版本: $ git clone git://https://www.doczj.com/doc/9213401243.html,/pub/scm/linux/kernel/git/torvalds/linux-2.6.git 然后使用下面的命令将你的代码树与Linus的代码树最新状态同步: $ git pull 安装内核源代码 内核包有GNU zip(gzip)和bzip2格式。Bzip2是默认和首选格式,因为它的压缩比通常比gzip更好,bzip2格式的Linux内核包一般采用linux-x.y.z.tar.bz2形式的文件名,这里的x.y.z是内核源代码的具体版本号,下载到源代码包后,解压和抽取就很简单了,如果你下载的是bzip2包,运行: $ tar xvjf linux-x.y.z.tar.bz2 如果你下载的是gzip包,则运行: $ tar xvzf linux-x.y.z.tar.gz 无论执行上面哪一个命令,最后都会将源代码解压和抽取到linux-x.y.z目录下,如果你使用Git下载和管理内核源代码,你不需要下载tar包,只需要运行git clone命令,它就会自动下载和解压。 内核源代码通常都会安装到/usr/src/linux下,但在开发的时候最好不要使用这个源代码树,因为针对你的C库编译的内核版本通常也链接到这里的。 应用补丁

电大公共管理学作业及答案

公共管理学习题 一、简答题 1、公共管理的内涵: 所谓公共管理, 就是公共组织运用所拥有的公共权力, 为有效地实现公共利益, 对社会公共事务进行管理的社会活动。主要包括以下几点: ( 1) 公共管理的主体是公共组织( 2) 公共管理的客体是社会公共事务( 3) 公共管理的目的是实现公共利益( 4) 公共管理的过程是公共权利的运作过程 2、政府职能演变经过的阶段: ( 1) 限制政府干预( 2) 主张政府干预( 3) 对政府职能的重新思考 3、简述政府失效理论的基本观点及政府失效的表现: 政府失效理论的基本观点是对人的”经济人”的假设。即认为人是自利的、理性的, 而且每个人都在追求个人利益的最大化, 政府公务员也不例外。由此看来, 在政治决策过程中, 人的一切行为都可看成是经济行为, 而使”政府政治过程的目的肯定是增进公共利益的假设”受到质疑而不得不被放弃。( 1) 公共政策失效 ( 2) 公共产品供给的低效率( 3) 内部性与政府扩张( 4) ”寻租”及腐败 4、简述非政府公共组织的基本特征: ( 1) 非政府性( 2) 公益性( 3) 正规性( 4) 专门性( 5) 志愿性 5、公共政策的特征表现在哪些方面: ( 1) 公共性( 2) 利益选择性( 3) 目标指向性( 4) 权威约束性 ( 5) 功能多极性( 6) 动态稳定性 6、简述公共政策规划的主体和基本原则: 公共政策规划的主体是指参与政策方案设计与研究的所有机构和人员。 ( 1) 执政党( 2) 立法机关( 3) 行政机关( 4) 利益集团( 5) 大众传媒 政策规划的原则是指政策规划需要遵循的基本准则: ( 1) 公正原则( 2) 受益原则

嵌入式Linux系统内核的配置、编译和烧写

实验二 嵌入式Linux系统内核的配置、编译和烧写 1.实验目的 1)掌握交叉编译的基本概念; 2)掌握配置和编译嵌入式Linux操作系统内核的方法; 3)掌握嵌入式系统的基本架构。 2.实验环境 1)装有Windows系统的计算机; 2)计算机上装有Linux虚拟机软件; 3)嵌入式系统实验箱及相关软硬件(各种线缆、交叉编译工具链等等)。 3.预备知识 1)嵌入式Linux内核的配置和裁剪方法; 2)交叉编译的基本概念及编译嵌入式Linux内核的方法; 3)嵌入式系统的基本架构。 4.实验内容和步骤 4.1 内核的配置和编译——配置内核的MMC支持 1)由于建立交叉编译器的过程很复杂,且涉及汇编等复杂的指令,在这里 我们提供一个制作好的编译器。建立好交叉编译器之后,我们需要完成 内核的编译,首先我们要有一个完整的Linux内核源文件包,目前流行 的源代码版本有Linux 2.4和Linux 2.6内核,我们使用的是Linux 2.6内核; 2)实验步骤: [1]以root用户登录Linux虚拟机,建立一个自己的工作路径(如用命令 “mkdir ‐p /home/user/build”建立工作路径,以下均采用工作路径 /home/user/build),然后将“cross‐3.3.2.tar.bz2、dma‐linux‐2.6.9.tar.gz、 dma‐rootfs.tar.gz”拷贝到工作路径中(利用Windows与虚拟机Linux 之间的共享目录作为中转),并进入工作目录; [2]解压cross‐3.3.2.tar.bz2到当前路径:“tar ‐jxvf cross‐3.3.2.tar.bz2”; [3]解压完成后,把刚刚解压后在当前路径下生成的“3.3.2”文件夹移 动到“/usr/local/arm/”路径下,如果在“/usr/local/”目录下没有“arm” 文件夹,用户创建即可; [4]解压“dma‐linux‐2.6.9.tar.gz”到当前路径下:

华中农业大学621《公共管理学》考试大纲

华中农业大学621《公共管理学》考试大纲 第1章导论 1.公共管理的内涵、性质与特点 2.传统公共行政模式的特征与基本原理 3.公共管理的产生与发展 4.公共管理学的创立和完善 5.公共管理面临的时代挑战 6.公共管理学的理论基础与研究方法 第2章公共组织与第三部门 1.公共组织的定义和性质 2.公共组织的构成要素和类型 3.公共组织环境 4.公共组织的结构与体制 5.公共组织体制改革 6.第三部门的概念、特征与分类 7.第三部门发展的原因与作用 8.第三部门的运营管理 9.中国第三部门发展中的问题和对策 第3章公共管理职能 1.公共管理职能体系和特征 2.公共管理职能的发展 3.市场功能与政府职能的配合 4.政府失败的纠正与防范 5.中国政府职能探讨 第4章公共部门战略管理 1.公共部门战略管理概述 2.公共部门战略管理过程 3.公共部门战略规划管理 4.公共部门战略管理的问题与对策 5.公共部门战略管理改革进展与趋势 第5章公共部门人力资源管理 1.人力资源的特性与现代人力资源管理的兴起 2.人力资源管理的功能 3.人力资源管理者的角色与知能 4.公共部门人力资源开发的主要内容 5.公共部门人力资源管理者的工作 6.中国公共部门人力资源开发的问题和对策

7.工作生活质量----公共部门人力资源管理的新策略 8.国家公务员制度 9.公务员的管理与改革趋势 第6章社会保障管理 1.社会保障管理的内容 2.社会保障管理体制 3.社会保障的国际经验 4.中国社会保障管理体制改革与完善 第7章电子政务管理 1.电子政务概述 2.电子政务的内容和作用 3.电子政务的实施原则和关键 4.电子政务对政府管理变革的影响 第8章公共部门的绩效管理 1.公共部门绩效管理的概念和意义 2.公共部门的绩效评估 3.公共部门的监督 4.公共部门绩效管理中的问题和对策 5.标杆管理 第9章公共管理的方法和技术 1.公共管理的基本方法概述 2.社会调查研究方法 3.系统分析技术和方法 4.控制方法和技术 5.决策方法和技术 第10章新公共管理与政府再造 1.新公共管理概述 2.新公共管理的模式 3.政府再造的内涵与背景 4.企业型政府的基本理念 5.企业型政府的实施策略及其限制 6.企业型政府与政府再造实践 参考书:①《公共管理学》,王德高主编,武汉大学出版社,2005年版。②《公共管理学》(修订版),张成福、党秀云著,中国人民大学出版社,2007年版。

linux内核编译和生成makefile文件实验报告

操作系统实验报告 姓名:学号: 一、实验题目 1.编译linux内核 2.使用autoconf和automake工具为project工程自动生成Makefile,并测试 3.在内核中添加一个模块 二、实验目的 1.了解一些命令提示符,也里了解一些linux系统的操作。 2.练习使用autoconf和automake工具自动生成Makefile,使同学们了解Makefile的生成原理,熟悉linux编程开发环境 三、实验要求 1使用静态库编译链接swap.c,同时使用动态库编译链接myadd.c。可运行程序生成在src/main目录下。 2要求独立完成,按时提交 四、设计思路和流程图(如:包括主要数据结构及其说明、测试数据的设计及测试结果分析) 1.Makefile的流程图: 2.内核的编译基本操作 1.在ubuntu环境下获取内核源码 2.解压内核源码用命令符:tar xvf linux- 3.18.12.tar.xz 3.配置内核特性:make allnoconfig 4.编译内核:make 5.安装内核:make install

6.测试:cat/boot/grub/grub.conf 7.重启系统:sudo reboot,看是否成功的安装上了内核 8.详情及结构见附录 3.生成makefile文件: 1.用老师给的projec里的main.c函数。 2.需要使用automake和autoconf两个工具,所以用命令符:sudo apt-get install autoconf 进行安装。 3.进入主函数所在目录执行命令:autoscan,这时会在目录下生成两个文件 autoscan.log和configure.scan,将configure.Scan改名为configure.ac,同时用gedit打开,打开后文件修改后的如下: # -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ([2.69]) AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS]) AC_CONFIG_SRCDIR([main.c]) AC_CONFIG_HEADERS([config.h]) AM_INIT_AUTOMAKE(main,1.0) # Checks for programs. AC_PROG_CC # Checks for libraries. # Checks for header files. # Checks for typedefs, structures, and compiler characteristics. # Checks for library functions. AC_OUTPUT(Makefile) 4.新建Makefile文件,如下: AUTOMAKE_OPTIONS=foreign bin_PROGRAMS=main first_SOURCES=main.c 5.运行命令aclocal 命令成功之后,在目录下会产生aclocal.m4和autom4te.cache两个文件。 6.运行命令autoheader 命令成功之后,会在目录下产生config.h.in这个新文件。 7.运行命令autoconf 命令成功之后,会在目录下产生configure这个新文件。 8.运行命令automake --add-missing输出结果为: Configure.ac:11:installing./compile’ Configure.ac:8:installing ‘.install-sh’ Configure.ac:8:installing ‘./missing’ Makefile.am:installing ‘./decomp’ 9. 命令成功之后,会在目录下产生depcomp,install-sh和missing这三个新文件和执行下一步的Makefile.in文件。 10.运行命令./configure就可以自动生成Makefile。 4.添加内核模块

linux、内核源码、内核编译与配置、内核模块开发、内核启动流程

linux、内核源码、内核编译与配置、内核模块开发、内核启动流程(转) linux是如何组成的? 答:linux是由用户空间和内核空间组成的 为什么要划分用户空间和内核空间? 答:有关CPU体系结构,各处理器可以有多种模式,而LInux这样的划分是考虑到系统的 安全性,比如X86可以有4种模式RING0~RING3 RING0特权模式给LINUX内核空间RING3给用户空间 linux内核是如何组成的? 答:linux内核由SCI(System Call Interface)系统调用接口、PM(Process Management)进程管理、MM(Memory Management)内存管理、Arch、 VFS(Virtual File Systerm)虚拟文件系统、NS(Network Stack)网络协议栈、DD(Device Drivers)设备驱动 linux 内核源代码 linux内核源代码是如何组成或目录结构? 答:arc目录存放一些与CPU体系结构相关的代码其中第个CPU子目录以分解boot,mm,kerner等子目录 block目录部分块设备驱动代码 crypto目录加密、压缩、CRC校验算法 documentation 内核文档 drivers 设备驱动 fs 存放各种文件系统的实现代码 include 内核所需要的头文件。与平台无关的头文件入在include/linux子目录下,与平台相关的头文件则放在相应的子目录中 init 内核初始化代码 ipc 进程间通信的实现代码 kernel Linux大多数关键的核心功能者是在这个目录实现(程序调度,进程控制,模块化) lib 库文件代码 mm 与平台无关的内存管理,与平台相关的放在相应的arch/CPU目录net 各种网络协议的实现代码,注意而不是驱动 samples 内核编程的范例 scripts 配置内核的脚本 security SElinux的模块 sound 音频设备的驱动程序 usr cpip命令实现程序 virt 内核虚拟机 内核配置与编译 一、清除 make clean 删除编译文件但保留配置文件

linux 内核编译编译选项

1.Code maturity level options 代码成熟等级。此处只有一项:prompt for development and/or incomplete code/drivers,如果你要试验现在仍处于实验阶段的功能,就必须把该项选择为Y了;否则可以把它选择为N。 2. Loadable module support 对模块的支持。这里面有三项: Enable loadable module support:除非你准备把所有需要的内容都编译到内核里面,否则该项应该是必选的。 Set version inFORMation on all module symbols:可以不选它。 Kernel module loader:让内核在启动时有自己装入必需模块的能力,建议选上。 3. Processor type and features CPU类型。有关的几个如下: Processor family:根据你自己的情况选择CPU类型。 High Memory Support:大容量内存的支持。可以支持到4G、64G,一般可以不选。 Math emulation:协处理器仿真。协处理器是在386时代的宠儿,现在早已不用了。 MTTR support:MTTR支持。可不选。 Symmetric multi-processing support:对称多处理支持。除非你富到有多个CPU,否则就不用选了。 4. General setup 这里是对最普通的一些属性进行设置。这部分内容非常多,一般使用缺省设置就可以了。下面介绍一下经常使用的一些选项: Networking support:网络支持。必须,没有网卡也建议你选上。 PCI support:PCI支持。如果使用了PCI的卡,当然必选。 PCI access mode:PCI存取模式。可供选择的有BIOS、Direct和Any,选Any 吧。 Support for hot-pluggabel devices:热插拔设备支持。支持的不是太好,可不选。 PCMCIA/CardBus support:PCMCIA/CardBus支持。有PCMCIA就必选了。System V IPC BSD Process Accounting Sysctl support:以上三项是有关进程处理/IPC调用的,主要就是System V 和BSD两种风格。如果你不是使用BSD,就按照缺省吧。 Power Management support:电源管理支持。 Advanced Power Management BIOS support:高级电源管理BIOS支持。

公共管理学

公共管理学 第一章绪论 第一节公共管理的含义与功能 一、公共管理的含义: 公共管理是以政府为核心的公共部门整合社会的各种力量,并广泛运用政治的、经济的、管理的、法律的方法,强化政府的治理能力,提升政府绩效和公共服务的品质,从而实现公共的福利和公共利益的一种管理活动。 二、公共管理的特性 1、公共性:利益取向的公共性;公共参与性。 2、服务性 3、合作共治性 三、公共管理的功能 1、经济功能 几个环节:限制垄断和促进竞争;界定和维护财产权,克服外部性;提供公共物品;保障收入分配的公正化;调控宏观经济。 2、政治功能 3、社会功能 具体内容:提供社会服务;维护社会稳定;提供社会保障,包括提供养老保险、医疗保险、失业保险、工伤保险等社会保险和社会救助;环境保护。 第二节公共管理理论的发展

一、公共行政时期(19世纪末—20世纪80年代) 1、公共行政时期(1887—1960) 2、新公共行政时期(1960—1980) 二、新公共管理时期(20世纪70年代末80年代初至今) 第三节公共管理准则 一、以人为本的准则 二、公共利益至上的准则 三、公共参与的准则 思考题: 1、在公共管理的不同发展时期,人民对公共管理的含义的认识有何不同?结合自己的认识和体会,你认为应该怎样界定公共管理的含义? 答:(一)皮瑞和克莱姆的观点;公共管理是一种新的途径,它是传统公共行政的规范取向以及一般管理之工具取向的结合体。公共管理的重点是将公共行政作为一种职业,并将公共管理者视为职业的实践者,而非政客或政治家。(二)卡尔森和欧尔曼的观点:他们认为,公共管理是对行政的一般方面的学科间整合的研究,它将人力、财政、物资、信息和政治资源的管理与管理学的计划、组织、控制职能相融合。(三)奥托、海蒂和沙夫里茨的观点:公共管理是公共行政或公共事务的一部分,综合了公共行政的方案设计与组织重建、政策与管理规划、通过预算制度进行资源分配、财务管理、人力资源管理以及各种方法和艺术。公共管理将公共行政视为一门职业,将公共管理者

配置和编译Linux内核

配置和编译Linux内核 对内核进行正确配置后,才能进行编译。配置不当的内核,很有可能编译出错,或者不能正确运行。 1.1.1 快速配置内核 进入Linux内核源码数顶层目录,输入make menuconfig命令,可进入如图0.1所示的基于Ncurses的Linux内核配置主界面(注意:主机须安装ncurses相关库才能正确运行该命令并出现配置界面)。如果没有在Makefile中指定ARCH,则须在命令行中指定: $ make ARCH=arm menuconfig 图0.1基于Ncurses的Linux内核配置主界面 基于Ncurses的Linux内核配置界面不支持鼠标操作,必须用键盘操作。基本操作方法: ?通过键盘的方向键移动光标,选中的子菜单或者菜单项高亮; ?按TAB键实现光标在菜单区和功能区切换; ?子菜单或者选项高亮,将光标移功能区选中