linux內核重啟之後要編譯嗎
Linux下內核和界面(如窗口管理器, gnome, kde 等)是分離的, 這個和windows是完全不同的.
你編譯一個新的內核, 並重啟,讓它生效, 界面是沒有任何影響的.
如何編譯內核, 你自己google吧.不難的.
B. 一文了解riscv軟體系列之linux內核編譯運行
一、交叉編譯工具鏈的安裝
安裝交叉編譯工具鏈主要包含幾個步驟:下載源碼、安裝編譯依賴、編譯工具鏈、配置路徑。確保下載所有子模塊使用--recursive選項。安裝編譯所需的工具如:gcc、binutils等。編譯支持32位和64位系統的交叉編譯工具鏈,最終安裝於/opt/riscv目錄,前綴為riscv64-unknown-linux-gnu-,兼容兩種位數系統。
二、編譯Linux內核
下載Linux 5.2.4源碼,配置RISC-V內核選項,將defconfig拷貝到.config文件,直接保存退出,使用默認配置。編譯時,添加CROSS_COMPILE=riscv64-unknown-linux-gnu-選項。編譯完成後,在arch/riscv/boot目錄下找到內核鏡像,分別為Image和Image.gz。
三、根文件系統製作
下載BusyBox源碼,選擇靜態編譯方式,修改配置以滿足RISC-V環境需求。進入目錄,創建常見文件夾,復制BusyBox生成的文件至指定路徑。修改fstab>文件配置,調整init.d/rcS>文件以優化系統啟動。完成rootfs.img卸載後,根文件系統鏡像文件rootfs.img製作完成。
四、QEMU模擬器運行Linux內核
獲取QEMU模擬器,選擇對應操作系統版本的下載鏈接。運行Linux內核,觀察運行結果。至此,完成了內核配置、編譯、文件系統編譯及Linux系統運行的全過程。
結語
通過以上步驟,實現了使用RISC-V架構編譯、運行Linux內核的全過程。具體實踐過程中,可能會遇到許可權問題,需要適當調整,確保操作順利進行。
C. linux編譯內核步驟
一、准備工作
a) 首先,你要有一台PC(這不廢話么^_^),裝好了Linux。
b) 安裝好GCC(這個指的是host gcc,用於編譯生成運行於pc機程序的)、make、ncurses等工具。
c) 下載一份純凈的Linux內核源碼包,並解壓好。
注意,如果你是為當前PC機編譯內核,最好使用相應的Linux發行版的源碼包。
不過這應該也不是必須的,因為我在我的Fedora 13上(其自帶的內核版本是2.6.33.3),就下載了一個標準的內核linux-2.6.32.65.tar.xz,並且順利的編譯安裝成功了,上電重啟都OK的。不過,我使用的.config配置文件,是Fedora 13自帶內核的配置文件,即/lib/moles/`uname -r`/build/.config
d) 如果你是移植Linux到嵌入式系統,則還要再下載安裝交叉編譯工具鏈。
例如,你的目標單板CPU可能是arm或mips等cpu,則安裝相應的交叉編譯工具鏈。安裝後,需要將工具鏈路徑添加到PATH環境變數中。例如,你安裝的是arm工具鏈,那麼你在shell中執行類似如下的命令,假如有類似的輸出,就說明安裝好了。
[root@localhost linux-2.6.33.i686]# arm-linux-gcc --version
arm-linux-gcc (Buildroot 2010.11) 4.3.5
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for ing conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
註:arm的工具鏈,可以從這里下載:回復「ARM」即可查看。
二、設置編譯目標
在配置或編譯內核之前,首先要確定目標CPU架構,以及編譯時採用什麼工具鏈。這是最最基礎的信息,首先要確定的。
如果你是為當前使用的PC機編譯內核,則無須設置。
否則的話,就要明確設置。
這里以arm為例,來說明。
有兩種設置方法():
a) 修改Makefile
打開內核源碼根目錄下的Makefile,修改如下兩個Makefile變數並保存。
ARCH := arm
CROSS_COMPILE := arm-linux-
注意,這里cross_compile的設置,是假定所用的交叉工具鏈的gcc程序名稱為arm-linux-gcc。如果實際使用的gcc名稱是some-thing-else-gcc,則這里照葫蘆畫瓢填some-thing-else-即可。總之,要省去名稱中最後的gcc那3個字母。
b) 每次執行make命令時,都通過命令行參數傳入這些信息。
這其實是通過make工具的命令行參數指定變數的值。
例如
配置內核時時,使用
make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig
編譯內核時使用
make ARCH=arm CROSS_COMPILE=arm-linux-
注意,實際上,對於編譯PC機內核的情況,雖然用戶沒有明確設置,但並不是這兩項沒有配置。因為如果用戶沒有設置這兩項,內核源碼頂層Makefile(位於源碼根目錄下)會通過如下方式生成這兩個變數的值。
SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
-e s/arm.*/arm/ -e s/sa110/arm/ \
-e s/s390x/s390/ -e s/parisc64/parisc/ \
-e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
-e s/sh[234].*/sh/ )
ARCH?= $(SUBARCH)
CROSS_COMPILE ?=
經過上面的代碼,ARCH變成了PC編譯機的arch,即SUBARCH。因此,如果PC機上uname -m輸出的是ix86,則ARCH的值就成了i386。
而CROSS_COMPILE的值,如果沒配置,則為空字元串。這樣一來所使用的工具鏈程序的名稱,就不再有類似arm-linux-這樣的前綴,就相當於使用了PC機上的gcc。
最後再多說兩句,ARCH的值還需要再進一步做泛化。因為內核源碼的arch目錄下,不存在i386這個目錄,也沒有sparc64這樣的目錄。
因此頂層makefile中又構造了一個SRCARCH變數,通過如下代碼,生成他的值。這樣一來,SRCARCH變數,才最終匹配到內核源碼arch目錄中的某一個架構名。
SRCARCH := $(ARCH)
ifeq ($(ARCH),i386)
SRCARCH := x86
endif
ifeq ($(ARCH),x86_64)
SRCARCH := x86
endif
ifeq ($(ARCH),sparc64)
SRCARCH := sparc
endif
ifeq ($(ARCH),sh64)
SRCARCH := sh
endif
三、配置內核
內核的功能那麼多,我們需要哪些部分,每個部分編譯成什麼形式(編進內核還是編成模塊),每個部分的工作參數如何,這些都是可以配置的。因此,在開始編譯之前,我們需要構建出一份配置清單,放到內核源碼根目錄下,命名為.config文件,然後根據此.config文件,編譯出我們需要的內核。
但是,內核的配置項太多了,一個一個配,太麻煩了。而且,不同的CPU架構,所能配置的配置項集合,是不一樣的。例如,某種CPU的某個功能特性要不要支持的配置項,就是與CPU架構有關的配置項。所以,內核提供了一種簡單的配置方法。
以arm為例,具體做法如下。
a) 根據我們的目標CPU架構,從內核源碼arch/arm/configs目錄下,找一個與目標系統最接近的配置文件(例如s3c2410_defconfig),拷貝到內核源碼根目錄下,命名為.config。
注意,如果你是為當前PC機編譯內核,最好拷貝如下文件到內核源碼根目錄下,做為初始配置文件。這個文件,是PC機當前運行的內核編譯時使用的配置文件。
/lib/moles/`uname -r`/build/.config
這里順便多說兩句,PC機內核的配置文件,選擇的功能真是多。不編不知道,一編才知道。Linux發行方這樣做的目的,可能是想讓所發行的Linux能夠滿足用戶的各種需求吧。
b) 執行make menuconfig對此配置做一些需要的修改,退出時選擇保存,就將新的配置更新到.config文件中了。
注
D. Linux啟動過程Kernel,Rootfs,Uboot,INIT進程,BootLoader,內核空間一次講清楚!!!
在用戶空間程序啟動後,Linux系統進入正常工作狀態,允許用戶通過Shell或其他應用執行任務,如編輯文本和管理文件等。
以全志H6為例,BootLoader是嵌入式系統啟動的關鍵組件。它負責載入內核文件和設備樹文件等,為後續內核運行提供基礎環境。BootLoader需完成一系列步驟,如讀取、解壓、編譯和設置參數,以確保內核的順利啟動。
當內核載入完畢後,Linux會載入內存中的root文件系統(rootfs),它是系統的核心文件系統,包含了必需的目錄如/bin, /dev等,為用戶空間進程提供運行環境。rootfs是一個只包含基本系統組件的內存文件系統,不依賴硬碟。
內核載入rootfs是為了使用戶空間進程能夠訪問和執行文件和資源。內核作為操作系統核心,雖然負責硬體和軟體資源管理,但並不包含用戶空間程序,因此需要rootfs來支持用戶進程的運行。
在Linux啟動過程中,init進程作為第一個用戶級進程,負責系統初始化和啟動,它會按照預定順序啟動其他進程和服務,如載入文件系統和守護進程。內核映像文件,如vmlinuz或bzImage,是編譯後的二進制文件,是系統啟動時被載入到內存中執行的。
內核空間和用戶態是操作系統區分許可權的兩個層面。用戶態程序通過系統調用與內核交互,實現對硬體資源的訪問。CPU在內核模式下擁有高度許可權,而在用戶模式下程序受到限制,以確保系統的安全。