linux系統編程源碼
⑴ 請問linux下的系統命令是不是開源的 比如sort,awk等等,如果是的話,在哪可以找到源代碼
Linux是開源的,它自帶的功能強大的命令也是開源的,也就是說,我們可以獲得這些命令的源代碼並研究它。那究竟如何獲得系統的命令的源代碼呢?
命令的源代碼是一個軟體包為單元的,放在一個軟體包的源代碼中,若要下載一個命令的源代碼,就要把這個命令所屬的軟體包的源代碼都下載下來。命令的源代碼就在下載的源代碼的相關目錄內,通常是src目錄,相應的主文件名為cmd.c,其中cmd為具體的命令,如ls命令的主程序文件為ls.c。可查閱「Linux命令大全」了解Linux命令。
⑵ 如何編譯linux源代碼
首先uname -r看一下你當前的linux內核版本
1、linux的源碼是在/usr/src這個目錄下,此目錄有你電腦上各個版本的linux內核源代碼,用uname -r命令可以查看你當前使用的是哪套內核,你把你下載的內核源碼也保存到這個目錄之下。
2、配置內核 make menuconfig,根據你的需要來進行選擇,設置完保存之後會在當前目錄下生成.config配置文件,以後的編譯會根據這個來有選擇的編譯。
3、編譯,依次執行make、make bzImage、make moles、make moles
4、安裝,make install
5、.創建系統啟動映像,到 /boot 目錄下,執行 mkinitramfs -o initrd.img-2.6.36 2.6.36
6、修改啟動項,因為你在啟動的時候會出現多個內核供你選擇,此事要選擇你剛編譯的那個版本,如果你的電腦沒有等待時間,就會進入默認的,默認的那個取決於 /boot/grub/grub.cfg 文件的設置,找到if [ "${linux_gfx_mode}" != "text" ]這行,他的第一個就是你默認啟動的那個內核,如果你剛編譯的內核是在下面,就把代表這個內核的幾行代碼移到第一位如:
menuentry 'Ubuntu, with Linux 3.2.0-35-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
gfxmode $linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set=root 9961c170-2566-41ac-8155-18f231c1bea5
linux/boot/vmlinuz-3.2.0-35-generic root=UUID=9961c170-2566-41ac-8155-18f231c1bea5 ro quiet splash $vt_handoff
initrd/boot/initrd.img-3.2.0-35-generic
}
當然你也可以修改 set default="0"來決定用哪個,看看你的內核在第幾位,default就填幾,不過我用過這種方法,貌似不好用。
重啟過後你編譯的內核源碼就成功地運行了,如果出現問題,比如滑鼠不能用,usb不識別等問題就好好查查你的make menuconfig這一步,改好後就萬事ok了。
最後再用uname -r看看你的linux內核版本。是不是你剛下的那個呢!有沒有成就感?
⑶ 求一段Linux操作系統源代碼分析
這個文件非常小 你們老師分析模板給了很好分析了
一,源代碼文件名稱
Linux/lib/setsid.c
二,源代碼功能描述
整體功能:如果調用的進程不是一個組的組長時,setsid創建一個新會話。調用進程將成為該新會話的組長,新進程組的組長,並且沒有控制終端。調用進程的組id和會話id被設置成進程的PID,調用進程將成為新進程組合和新會話中的唯一進程。
函數輸入:pid-t,setsid
函數輸出:調用進程的會話標識符
函數功能:(就一個函數,所以就跟整體功能相同就行了)
三,程序流程圖 (可以省略了)
⑷ linux內核源碼詳解
Linux的內核源代碼可以從很多途徑得到。一般來講,在安裝的linux系統下,/usr/src/linux目錄下的東西就是內核源代碼。
對於源代碼的閱讀,要想比較順利,事先最好對源代碼的知識背景有一定的了解。對於linux內核源代碼來講,我認為,基本要求是:1、操作系統的基本知識; 2、對C語言比較熟悉,最好要有匯編語言的知識和GNU C對標准C的擴展的知識的了解。
另外在閱讀之前,還應該知道Linux內核源代碼的整體分布情況。我們知道現代的操作系統一般由進程管理、內存管理、文件系統、驅動程序、網路等組成。看一下Linux內核源代碼就可看出,各個目錄大致對應了這些方面。Linux內核源代碼的組成如下(假設相對於linux目錄):
arch 這個子目錄包含了此核心源代碼所支持的硬體體系結構相關的核心代碼。如對於X86平台就是i386。
include 這個目錄包括了核心的大多數include文件。另外對於每種支持的體系結構分別有一個子目錄。
init 此目錄包含核心啟動代碼。
mm 此目錄包含了所有的內存管理代碼。與具體硬體體系結構相關的內存管理代碼位於arch/-/mm目錄下,如對應於X86的就是arch/i386/mm/fault.c 。
drivers 系統中所有的設備驅動都位於此目錄中。它又進一步劃分成幾類設備驅動,每一種也有對應的子目錄,如音效卡的驅動對應於drivers/sound。
ipc 此目錄包含了核心的進程間通訊代碼。
moles 此目錄包含已建好可動態載入的模塊。
fs Linux支持的文件系統代碼。不同的文件系統有不同的子目錄對應,如ext2文件系統對應的就是ext2子目錄。
kernel 主要核心代碼。同時與處理器結構相關代碼都放在arch/-/kernel目錄下。
net 核心的網路部分代碼。裡面的每個子目錄對應於網路的一個方面。
lib 此目錄包含了核心的庫代碼。與處理器結構相關庫代碼被放在arch/-/lib/目錄下。
scripts 此目錄包含用於配置核心的腳本文件。
Documentation 此目錄是一些文檔,起參考作用。
⑸ LINUX的源代碼是什麼
Linux 的源代碼就是 Linux 的源代碼……
Linux 的源代碼 != Linux 的內核源代碼。
一般所說的 Linux ,是指一整套 GNU/Linux 套件的。
⑹ linux系統的源代碼哪裡可以下載
如果要下載指定版本的內核源代碼,就去官網下載,地址:
http://www.kernel.org/
如果要查看本機(某個發行版的內核源代碼),可以在目錄
/usr/src/kernels下面找到。
如果要查看某些安裝文件的源代碼,可以使用命令查看該文件
的安裝源,以查看cat源碼為例,命令:rpm -qif `which cat`
之後會有相關信息列印出來,訪問其源碼路徑,下載即可。
附本人博客「獲取Linux命令源代碼的方法」鏈接如下:
http://blog.csdn.net/shallowgrave/article/details/7854548
⑺ linux中源碼編譯需要哪些軟體
一、程序的組成部分
Linux下程序大都是由以下幾部分組成:
二進制文件:也就是可以運行的程序文件
庫文件:就是通常我們見到的lib目錄下的文件
配置文件:這個不必多說,都知道
幫助文檔:通常是我們在Linux下用man命令查看的命令的文檔
二、Linux下程序的存放目錄
Linux程序的存放目錄大致有三個地方:
/etc,
/bin,
/sbin,
/lib
:系統啟動就需要用到的程序,這些目錄不能掛載額外的分區,必須在根文件系統的分區上
/usr/bin,/usr/sbin,/usr/lib:操作系統核心功能,可以單獨分區
/usr/local/bin,/usr/local/sbin,/usr/local/lib,/usr/local/etc,/usr/local/man:這個用於安裝第三方程序,分別對應了二進制文件、庫文件、配置文件、幫助文檔的目錄
通常來說我們安裝程序就安裝在
/usr/local目錄下
三、編譯安裝源程序
1、使用如下命令查看當前是否安裝了gcc編譯器,沒有可以先用yum安裝gcc
gcc
--version
#查看是否安裝gcc
2、解壓源碼包,例如:
tar
-xvf
nginx-1.7.7.tar.gz
#解壓源碼包
3、進入解壓好的源碼包:
cd
nginx-1.7.7
#進入源碼包
4、執行configure文件,此文件有兩個功能:1、讓用戶選定編譯特性;2、檢查編譯環境。configure執行後將生成MakeFile文件。例如:
./configure
--prefix=/usr/local/nginx
--conf-path=/etc/nginx/nginx.conf
其中我們通過--prefix制定了安裝路徑,通過--conf-path制定了配置文件的具體位置。注意:不是所有的程序的configure參數都是一樣的
可以使用
./configure
--help查看詳細參數說明。如果該程序所依賴的庫在當前系統中沒有安裝,則會導致configure最後報錯,遇到這種情況就需要你先安裝依賴庫。
5、執行make命令,編譯程序
make
6、編譯成功後就可以安裝了,執行如下命令
make
install
到此程序就算安裝完成了,但是不要忘了還有後續的配置哦
四、配置程序
1、修改PATH環境變數,以能夠識別此程序的二進制文件路徑;
修改/etc/profile文件,在文件中
添加
export
PATH=$PATH:/path/to/somewhere#記得是可執行文件所在的目錄,路徑中不要包含可執行文件。
然後執行
:
source
/etc/profile
#是我們的修改生效
2、默認情況下,系統搜索庫文件的路徑/lib,
/usr/lib;
要增添額外搜尋路徑(注意:有的程序不提供庫文件,那就不需要此設置了)
在/etc/ld.so.conf.d/中創建以.conf為後綴名的文件,而後把要增添的路徑直接寫至此文件中;然後執行如下命令使其生效
ldconfig
3、如果程序提供了庫文件,也會相應的提供頭文件,一般在安裝目錄的include目錄下,系統默認掃描頭文件的路徑是:/usr/include。我們可以在/usr/include下用鏈接連接到我們安裝程序的頭文件。
ln
-s
/usr/local/nginx/include
/usr/include/yourname
4、可能程序還提供了幫助文檔,一般是安裝目錄下的man目錄,為了我們可以使用man命令查看我們程序的幫助文檔,我們需要:在/etc/man.config中添加一條MANPATH,指向我們的文檔目錄