




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Linux內(nèi)核分析課程概覽內(nèi)核分析課程概覽任國(guó)珍 LINUX內(nèi)核模塊LINUX編碼風(fēng)格LINUX內(nèi)核源碼LINUX內(nèi)核編譯LINUX課程介紹Linux內(nèi)核分析介紹 操作系統(tǒng)后續(xù)課程 為什么選LINUX(開(kāi)放、實(shí)用、流行) 操作系統(tǒng)簡(jiǎn)單回顧 定義(用戶接口、資源管理) 主要組成部分 現(xiàn)代系統(tǒng)主要概念( 中斷驅(qū)動(dòng)、多任務(wù)、保護(hù)、同步、系統(tǒng)調(diào)用等)LINUX源代碼 環(huán)境準(zhǔn)備(LXR) 內(nèi)核目錄結(jié)構(gòu) 學(xué)習(xí)線索 擬開(kāi)展討論專題環(huán)境準(zhǔn)備:LXR 0.3.1 Linux Cross Referencer lxr-0.3.1.tar.gz Depend on Webserver/Apache perl 5 g
2、limpse InstallLXR depends on, links exuberant ctags http:/ A relational database MySQL, Postgresql or Oracle Apache with mod_perl freetext searching Glimpse or Swish-eglimpse Glimpse is the powerful indexing and query system inside of Webglimpse, which is a feature-rich search e
3、ngine that has been used on thousands of sites. / install sh configure (or ./configure) make make installLXR 0.3.1 LXR Cross Referencer lxr-0.3.1.tar.gz Function Linux source cross reference URL http:/lxr.linux.no/ http:/ tar zxf lxr-0.3.1.tar.gz cd modify makefile INSTAL
4、LPREFIX: “tmp/lxr” “/var/www/html/lxr” make install modify /var/www/html/lxr/httpd/lxr.conf Sourceroot “/usr/src/linux/” create .htaccess ?/genxref /usr/src/linux安裝實(shí)踐Linux內(nèi)核功能目錄 系統(tǒng)啟動(dòng)和初始化arch/i386/kernel/*.Sinit/main.c內(nèi)存管理mm內(nèi)核/進(jìn)程調(diào)度arch/*/kernel kernel/sched.c kernel/fork.c include/linux/interrupt.h i
5、nclude/linux/sched.h PCIdrivers/pci/pci.c include/linux/pci.h進(jìn)程間通信ipc中斷處理arch/i386/kernel/irq.c include/asm-i386/irq.h設(shè)備驅(qū)動(dòng)blockchar cdrom 文件系統(tǒng)fs/buffer.c fs/ext2/ include/linux/ext2_fs.h ext2_fs_i.h ext2_fs_sb.h include/linux/fs.h網(wǎng)絡(luò)實(shí)現(xiàn)netinclude/net net/socket.c net/ipv4/af_inet.c net/core net/ipv4 d
6、rivers/net 模塊編程kernel/modules.c include/linux/module.h include/linux/kerneld.h include/linux/elf.h 其他學(xué)習(xí)線索 以執(zhí)行流程為線索 啟動(dòng)和初始化 POST bootsect.S,setup.S,head.S, main.c_start_kernel()cpu_idle()init 中斷 struct desc_struct idt_table256 進(jìn)程調(diào)度 void schedule(void 以數(shù)據(jù)結(jié)構(gòu)為線索 list(_head),如不同的進(jìn)程隊(duì)列 hash,如struct task_str
7、uct *pidhashPIDHASH_SZ; 配合*pidhash_next和*pidhash_pprev 以PCB為中心 進(jìn)程調(diào)度:sched.cgoodness()和schedule() vm_area struct vm_area_struct 以功能劃分各模塊為線索 進(jìn)程調(diào)度 文件操作和文件系統(tǒng)能夠 網(wǎng)絡(luò) ethernet IP Socket IPC MM drivers 開(kāi)發(fā)驅(qū)動(dòng)程序 設(shè)計(jì)硬件接口 參照一個(gè)樣本擬開(kāi)展的討論主題 Linux編程概論 make make,cvs,autoconf/automake, C/C+ gcc特性,調(diào)試gdb Assembly as gcc na
8、sm Linux網(wǎng)絡(luò)程序設(shè)計(jì) socket 后臺(tái)守護(hù)進(jìn)程daemon “Linux 守護(hù)進(jìn)程的編程方法” fork、inittab 被xinetd調(diào)用的進(jìn)程的編程方法 packet capture (promiscuous mode) libpcap/winpcap,tcpdump/windump/ethereal Linux模塊 內(nèi)核增強(qiáng) 設(shè)備驅(qū)動(dòng) 內(nèi)核變量調(diào)控 /proc /proc/sys/kernel sysctl -a 系統(tǒng)調(diào)用 竄改/監(jiān)視 增強(qiáng) 調(diào)度 一般原理 多CPU支持 文件系統(tǒng) 分區(qū)加密 網(wǎng)絡(luò)實(shí)現(xiàn) IPv4/IPv6 ipchain, iptable http:/filter
9、.org/ 內(nèi)核新方向新進(jìn)展 漢化問(wèn)題見(jiàn)解 內(nèi)核之爭(zhēng)模塊例子 monolithic vs. microkernel Linus_vs_Tanenbaum.htmlhttp:/ 模塊的概念:Kernel Module Linux引入的一種新的內(nèi)核動(dòng)態(tài)擴(kuò)展機(jī)制 克服了monolithic內(nèi)核的缺點(diǎn) Linux Kernel Module Programming Guide /LDP/lkmpg/HelloWorld module源程序hello.c #define LINUX #define _KERNEL_ #define MODULE #include #i
10、nclude int init_module() printk(Hello worldn); return 0; void cleanup_module() printk(byen); 打印所有進(jìn)程信息 extern unsigned long jiffies; struct task_struct *p = &init_task; do printk(%d %sn, p-pid, p-comm); p = p-next_task; while (p!=&init_task); 編譯hello.c in redhat 7.1#gcc -c hello.c#insmod hell
11、o.o#rmmod hello in redhat 7.3#gcc -c -I/lib/modules/2.4.18-3/build/include/ hello.c 可用函數(shù)舉例 rdtsc:rdtsc(low,high)、rdtscll(val) 跟蹤某些操作,修改sys_call_table 比如exit、fork、read、write等 亦可修改/增強(qiáng)某些操作功能Source File #gcc -c -I/lib/modules/2.4.20-8/build/include/ hello.c #insmod hello.o #lsmod #rmmod hello #lsmod #dm
12、esg* Under Redhat 9 in VMWareKernel Module in 2.6?按照通常2.4中的方法,在2.6遇到困難 裝一個(gè)新版本的module utilities 新的宏定義#define KBUILD_MODNAME=hello #rmmod=hello 在turbo linux desktop v10上通過(guò)LINUX編碼風(fēng)格 .C .asm/.s .obj .exe gcc hello.c gcc -S hello.c gcc -c hello.c as -o hello.o hello.s as hello.s objdump .bin/asmI386指令集 T
13、he IA-32 Intel Architecture Software Developers Manual http:/ MASM /Page_TechDocs/MASMDoc/ /Page_TechDocs/ NASM http:/ Goood place /index.htmlAT&T匯編 AT&T匯編格式,之與Intel差別 源與目的操作數(shù)位置反置movw %bx, %ax / mov ax, bx movw $1, %ax/
14、mov ax,1 尋址方式section:base + index*scale + disp 寫(xiě)做section:disp(base, index, scale) movw _array(% ebx,% eax,4), %cx 意即mov cx, ebx + 4*eax + array) 嵌入?yún)R編 簡(jiǎn)單的asm(nop); 或asm(cli);asm等同與_asm_asm( pushl % eaxnt movl $0, % eaxnt popl % eax); 擴(kuò)展的asm(statements : outputs : inputs : registers-modified); 比如,讀取CP
15、U時(shí)鐘戳26 #define rdtscll(val) 27 _asm_ _volatile_(rdtsc : =A (val) 限定符a,b,c,d表示eax,ebx,ecx,edxq,g表示某個(gè)任選的寄存器或某內(nèi)存變量m表示內(nèi)存變量i表示立即數(shù)嵌入?yún)R編例子 比如273 #define _syscall1(type,name,type1,arg1) 274 type name(type1 arg1) 275 276 long _res; 277 _asm_ volatile (int $0 x80 278 : =a (_res) 279 : (_NR_#name),b (long)(arg1
16、); 280 _syscall_return(type,_res); 281 詳細(xì)信息參見(jiàn) http:/ 修飾詞_attribute_, #define test(x) #xtest(123) 被替換成字符串123; #define test(x,y) x#ytest(123,456) 替換成123456;例子 程序#define test1(x) #x#define test2(x,y) x#y#define abxy 100main()puts(test1(123);printf(%dn, test2(12, 45);printf(%dn, test2(ab, xy); 輸出:123124
17、5100Makefile例子CC=gccMODCFLAGS := -Wall -DMODULE -D_KERNEL_ -DLINUX -I/lib/modules/2.4.18-6mdk/build/include/hello.o:hello.c $(CC) $(MODCFLAGS) -c hello.cCC=gccMODCFLAGS := -Wall -DMODULE -D_KERNEL_ -DLINUXhello.o:start.o stop.old -m elf_i386 -r -o hello.o start.o stop.ostart.o: start.c /usr/include/
18、linux/version.h$(CC) $(MODCFLAGS) -c start.cstop.o:stop.c /usr/include/linux/version.h$(CC) $(MODCFLAGS) -c stop.c Kernel中的依賴關(guān)系 Makefile及其包含 linux/config.h包含autoconf.h 它是make config配置出來(lái)的 參考windows中的make文件LINUX內(nèi)核編譯 獲得并安裝 Browse/hack Build Install Reboot 獲取內(nèi)核包 當(dāng)前的一般在/usr/src/已經(jīng)有了 http:/
19、 untar # tar zxf linux-x.x.x /usr/src/. # ln linux-x.x.x linux # cd /usr/src/linux認(rèn)識(shí)內(nèi)核代碼 編碼語(yǔ)言 使用c,而不是c+ 編譯器依賴gcc 支持c、c+, 及Fortran、Java、Ada等 /software/gcc/ 內(nèi)嵌AT&T匯編語(yǔ)言 gcc -S foo.c 則得到 foo.s goto語(yǔ)句 效率優(yōu)先,但是結(jié)構(gòu)還是較清晰的 inline ifdef在頭文件中修改內(nèi)核 Linux Kernel Module /init/version.c const cha
20、r *linux_banner EXPORT_SYMBOL EXPORT_SYMBOL(sym?); sys_call_table in /arch/i386/kernel/entry.S debugBuild a new kernel # make mrproper # make config 生成“.config”文件和“include/linux/autoconf.h”文件 使用/usr/src/linux/configs/config-?.* # make dep 如果有定義CONFIG_MODVERSIONS,則產(chǎn)生.ver文件 # make clean # make bzImage
21、 # make modules # make modules_install 請(qǐng)備份舊的/lib/modules/?.?.?先,如2.4.18-3 * 安裝bzImage 從arch/i386/boot/bzImage到/boot/.* 安裝lilo.conf # lilo # reboot 參考報(bào)告: lilo.conf prompt timeout=50/ 0.1秒單位 default=linux boot=/dev/sda map=/boot/map install=/boot/boot.b message=/boot/message linear image=/boot/vmlinuz-2.4.18-3 label=linux initrd=/boot/initrd-2.4.18-3.img read-only root=/dev/sda1編譯試驗(yàn)和報(bào)告 參見(jiàn) 第2章 關(guān)于2.6.0的編譯試驗(yàn)配置和編譯 /usr/src/linux 按照習(xí)慣: /u
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年鏈家房屋買賣定金支付及退還標(biāo)準(zhǔn)協(xié)議
- 二零二五年度住房租賃補(bǔ)貼擔(dān)保服務(wù)合同
- 二零二五年度蘇州市教育機(jī)構(gòu)用工企業(yè)勞動(dòng)合同書(shū)
- 二零二五年度云計(jì)算資源合作共享合同
- 2025年度電子商務(wù)平臺(tái)招防范合同法律風(fēng)險(xiǎn)合作協(xié)議
- 2025年度涂料班組涂料行業(yè)市場(chǎng)分析咨詢合同
- 二零二五年度特色日租房短租體驗(yàn)協(xié)議書(shū)
- 二零二五年度貸款居間代理及金融科技創(chuàng)新應(yīng)用合同
- 2025年度高端合同事務(wù)律師服務(wù)合同
- 2025年度智慧交通項(xiàng)目提前終止合同及交通設(shè)施移交協(xié)議
- 2024陸上風(fēng)電場(chǎng)改造拆除與循環(huán)利用設(shè)計(jì)導(dǎo)則
- 《消費(fèi)者權(quán)益與法律保護(hù)》課程培訓(xùn)教案課件
- 新概念英語(yǔ)第一冊(cè)語(yǔ)法練習(xí)
- 無(wú)人機(jī)法律法規(guī)與安全飛行 第2版 課件 8-2 -無(wú)人機(jī)人員的法律責(zé)任
- 產(chǎn)品外觀檢驗(yàn)標(biāo)準(zhǔn)通用
- 《建筑基坑工程監(jiān)測(cè)技術(shù)標(biāo)準(zhǔn)》(50497-2019)
- 2023年江蘇省泰州市高職單招數(shù)學(xué)摸底卷五(含答案)
- 質(zhì)量管理體系中英文縮寫(xiě)與其解釋
- 歷史文獻(xiàn)學(xué)之文獻(xiàn)校勘給09歷史開(kāi)第二章
- 中國(guó)教育行業(yè)調(diào)查報(bào)告-《中國(guó)教育行業(yè)白皮書(shū)》
- 鑄造廠重要危險(xiǎn)源清單
評(píng)論
0/150
提交評(píng)論