Linux 核心初級管理
Linux 核心初步管理 單核心體系設計,但充分借鑑了微核心設計體系的優點,微核心引入模組化機制; 核心組成部分: kernel:核心核心,一般為bzImage,通常在/boot目錄下,名稱為vmlinuz-VERSION-RELEASE; kernel object:核心物件,一般放置於/lib/modules/VERSION-RELEASE/; [ ] N [M] M [*] Y 輔助檔案: initrd:centos 5 initramfs:centos 6/7 核心是在記憶體中被載入執行的,放在磁碟中的只是核心檔案本身,執行中的核心只是某一核心檔案的副本 執行中的核心的版本: uname命令:print system information uname [OPTION]... -n:顯示節點名稱 -r:顯示核心的版本號 -m:顯示當前硬體平臺 -p:顯示處理器平臺 -o:顯示作業系統核心 -a:顯示所有 模組: lsmod:Show the status of modules in the Linux Kernel 顯示由核心已經裝載的模組 顯示的內容來自於:/proc/modules檔案 modinfo:Show information about a Linux Kernel module 顯示模組的詳細資訊(通過查詢資料庫來實現的,無需填寫絕對路徑來查詢); modinfo [-0] [-F field] [-k kernel] [modulename|filename...] -n:顯示模組檔案路徑 -p:顯示模組引數 --help:具體資訊檢視help modprobe:Add and remove modules from the Linux Kernel 裝載或解除安裝模組,不加引數為裝載模組; 裝載某模組時,如果需要依賴其他模組,則其他模組會一併裝載; 核心根據/lib/modules/$(uname -r)/modules.dep檔案生成的/lib/modules/$(uname -r)/modules.dep.bin這個二進位制程式計算依賴關係; 配置檔案:/etc/modprobe/*conf -r:解除安裝模組 depmod:Generate modules.dep and map files 生成模組依賴關係,和對映檔案; 可以指定為某一核心來生成依賴關係 裝載或解除安裝模組的其他方式: insmod:裝載模組 insmod $(modinfo -n module_NAME) rmmod:解除安裝模組 裝載時不會自動解決依賴關係且,需要填寫模組路徑 /proc目錄: 核心把自己的內部資訊、統計資訊以及可配置引數通過proc這個偽檔案系統加以輸出; 引數: 只讀引數:輸出資訊 可寫引數:可接受使用者指定的"新值"來實現對核心某功能或特性的配置; 位於/proc/sys目錄中,可通過sysctl命令檢視或設定此目錄中的引數,使用echo命令通過重定向的方式也可以修改大多數引數值; sysctl:configure kernel parameters at runtime sysctl [options] [variable[=value]] [...] 配置檔案:/etc/sysctl.conf 設定某核心引數: sysctl -w path.to.parameter=VALUE 立即生效,但是不會永久有效; 通過配置檔案設定引數 sysctl -p [/path/to/conf_file] 寫在配置檔案中不會立即生效,但會永久有效,可以通過-p選項使之生效; echo: echo "VALUE" > /proc/sys/path/to/file 核心中的路由轉發: /proc/sys/net/ipv4/ip_forward /sys目錄: 用來輸出硬體裝置的資訊及可配置引數 sysfs:輸出核心識別出的各硬體裝置的相關屬性資訊,也有核心對硬體特性的設定資訊;有些引數是可以修改的,用於調整硬體工作特性; 核心探測硬體資訊時,將探測的結果直接就輸出了從而就沒有記錄下來;但是建立裝置檔案時會用到這些資訊,所以當用戶空間要用到這些資訊時可以通過系統的內建機制觸發核心,讓它再探測一遍然後將資訊輸出到/sys目錄; 核心通過驅動程式來訪問硬體裝置,是不需要裝置檔案的,所以核心不會建立裝置檔案,只有使用者空間通過系統呼叫訪問硬體時會用到裝置檔案,所以在核心版本2.4之前所有裝置檔案都是事先建立完畢的,而在2.6之後的裝置檔案是通過udev在需要裝置檔案時才開始建立的; udev就是通過讀取/sys目錄中的硬體裝置資訊然後在/dev中建立裝置檔案的; udev是執行在使用者空間的程式; udev的專用工具:udevadmin、hotplug udev為裝置建立裝置檔案時,會讀取其事先定義好的命名規則檔案,一般在/etc/udev/rules.d/及/usr/lib/udev/rules.d/目錄下; ramdisk檔案的製作: mkinitrd:is a compat wrapper, which calls dracut to generate an initramfs 為當前正在使用的核心重新制作ramdisk檔案: mkinitrd /boot/initramfs-$(uname -r) $(uname -r) 或: dracut /boot/initramfs-$(uname -r) $(uname -r) 解壓centos7 的initramfs: mkdir initramfs cd initramfs /usr/lib/dracut/skipcpio /path/to/initramfs-VERSION.img | zcat | cpio -ivd 編譯核心: 前提: 準備好開發環境; 包組(Centos 6) Server Platform Development tools openssl-devel.x86_64 ncurses-devel.x86_64 獲取目標主機上硬體裝置的相關資訊; CPU: cat /proc/cpuinfo x86info:display x86 CPU diagnostics -a:顯示所有資訊; lscpu :list all PCI devices PCI裝置: lspci:list all PCI devices -v:顯示詳細資訊; -vv:顯示更詳細的資訊; lsusb:list USB devices lsblk:list block devices hal-device:顯示所有硬體資訊(centos 6) 獲取到目標主機系統功能的相關資訊,例如要啟動的檔案系統; 獲取核心原始碼包; www.kernel.org make menuconfig make help:幫助資訊 步驟: tar -Jxvf linux-VERSION -C /usr/src cd /usr/src ln -sv linux-VERSION linux cd linux cp /boot/config-$(uname -r) ./.config make menuconfig screen make -j # make mudoles_install make install 重啟系統,測試新核心
注:根據馬哥視訊做的學習筆記,如有錯誤,歡迎指正;侵刪