當前位置:首頁 » 編程軟體 » 基礎編譯

基礎編譯

發布時間: 2022-11-12 04:59:13

『壹』 學習編譯原理要有什麼基礎

數學知識要具備一些,因該是高數吧,c語言是要知道的,還有數據結構啊,也有點相關的,我們學校是大四才開的課。
這門課還是找個老師教比較好,自學是比較吃力的,希望你能成功!

『貳』 基礎編譯的固件中插入編譯日期該怎麼做

首先需要建議將「基礎編譯的固件」中的固件中插入編譯日期該這么做。

『叄』 學編譯原理需要什麼樣的基礎

看你的編譯原理是基於什麼語言的,我學過基於c的,那你就必須會用C編程,還要了解C的語法

『肆』 如何編譯一個linux下的驅動模塊

這是一個簡單而完整的實例,對於理解Linux下的驅動模塊是非常有幫助的。

1.源碼如下:
/*
* hello.c -- the example of printf "hello world!" in the screen of driver program
*/
#include <linux/init.h>
#include <linux/mole.h>
MODULE_LICENSE("Dual BSD/GPL");/* declare the license of the mole ,it is necessary */
static int hello_init(void)
{
printk(KERN_ALERT "Hello World enter!\n");
return 0;
}
static int hello_exit(void)
{
printk(KERN_ALERT "Hello world exit!\n");
}
mole_init(hello_init); /* load the mole */
mole_exit(hello_exit); /* unload the mole */
進入目錄:
[root@Alex_linux /]#cd /work/jiakun_test/moletest
[root@Alex_linux moletest]# vi hello.c
然後拷入上面書上的源碼。
2.編譯代碼:
1>.首先我在2.4內核的虛擬機上進行編譯,編譯過程如下:
[root@Alex_linux moletest]#gcc -D__KERNEL__ -I /usr/src/linux -DMODULE -Wall -O2 -c -o hello.o hello.c
其中-I選項指定內河源碼,也就是內核源碼樹路徑。編譯結果:
hello.c:1:22: net/sock.h: No such file or directory
hello.c: In function `hello_init':
hello.c:6: warning: implicit declaration of function `printk'
hello.c:6: `KERN_ALERT' undeclared (first use in this function)
hello.c:6: (Each undeclared identifier is reported only once
hello.c:6: for each function it appears in.)
hello.c:6: parse error before string constant
hello.c: In function `hello_exit':
hello.c:11: `KERN_ALERT' undeclared (first use in this function)
hello.c:11: parse error before string constant
hello.c: At top level:
hello.c:13: warning: type defaults to `int' in declaration of `mole_init'
hello.c:13: warning: parameter names (without types) in function declaration
hello.c:13: warning: data definition has no type or storage class
hello.c:14: warning: type defaults to `int' in declaration of `mole_exit'
hello.c:14: warning: parameter names (without types) in function declaration
hello.c:14: warning: data definition has no type or storage class
在網上查詢有網友提示沒有引入kernel.h
解決:vi hello.c
在第一行加入:#include <linux/kernel.h>
再次編譯仍然報KERN_ALERT沒有聲明
修改編譯條件-I,再次編譯:
[root@Alex_linux moletest]#gcc -D__KERNEL__ -I /usr/src/linux -DMODULE -Wall -O2 -c -o hello.o hello.c
[root@Alex_linux moletest]#ls
hello.c hello.o Makefile
[root@Alex_linux moletest]#
2>.接著我嘗試在2.6內核的虛擬機上進行編譯
編譯過程如下:
[root@JiaKun moletest]# ls
hello.c makefile
[root@JiaKun moletest]# vi hello.c
[root@JiaKun moletest]# make
make -C /mylinux/kernel/2.4.18-rmk7 M=/home/alex/test/moletest moles
make: *** /mylinux/kernel/2.4.18-rmk7: No such file or directory. Stop.
make: *** [moles] Error 2
[root@JiaKun moletest]# vi makefile
[root@JiaKun moletest]# make
make -C /usr/src/kernels/2.6.18-53.el5-i686 M=/home/alex/test/moletest moles
make[1]: Entering directory `/usr/src/kernels/2.6.18-53.el5-i686'
scripts/Makefile.build:17: /home/alex/test/moletest/Makefile: No such file or directory
make[2]: *** No rule to make target `/home/alex/test/moletest/Makefile'. Stop.
make[1]: *** [_mole_/home/alex/test/moletest] Error 2
make[1]: Leaving directory `/usr/src/kernels/2.6.18-53.el5-i686'
make: *** [moles] Error 2
[root@JiaKun moletest]# mv makefile Makefile
[root@JiaKun moletest]# make
make -C /usr/src/kernels/2.6.18-53.el5-i686 M=/home/alex/test/moletest moles
make[1]: Entering directory `/usr/src/kernels/2.6.18-53.el5-i686'
CC [M] /home/alex/test/moletest/hello.o
Building moles, stage 2.
MODPOST
CC /home/alex/test/moletest/hello.mod.o
LD [M] /home/alex/test/moletest/hello.ko
make[1]: Leaving directory `/usr/src/kernels/2.6.18-53.el5-i686'
[root@JiaKun moletest]# ls
hello.c hello.ko hello.mod.c hello.mod.o hello.o Makefile Mole.symvers

3.執行代碼,載入驅動模塊:
2.4內核載入模塊:
insmod ./hello.o
但是此時並沒有輸出printk列印的信息。但是可以在/var/log/messages 中看到列印的信息,這是由於KERN_ALERT優先順序不夠高。這里
需要修改為:KERN_EMERG。再次編譯,載入模塊即可以看到結果
2.6內核載入模塊:
[root@JiaKun moletest]# insmod hello.ko
[root@JiaKun moletest]#
Message from syslogd@ at Sat Jul 26 19:52:44 2008 ...
JiaKun kernel: Hello, world
有的朋友可能會出現insmod命令找不到的錯誤,這可能有下面幾個原因:
<1> 你的系統沒有安裝mole-init-tools工具,關於此問題,只需安裝即可,但是一般裝完系統是有這個命令的。
<2> 環境變數沒有添加導致不能使用該命令。使用echo $PATH即可查看PATH環境變數,發現沒有/sbin這個路徑,所以你當然不能使用insmod這個命令了。解決的方法很簡單,只需在命令行輸入:
PATH = "$PATH:/sbin"即可添加。(insmod在/sbin這個目錄下,你可以使用whereis insmod查看)。
<3> insmod這個命令需要在root許可權下才能使用。
載入完成後你可以輸入lsmod查看hello這個模塊哦。

4.卸載驅動模塊:rmmod hello.
載入模塊後就可在屏幕上看到如下信息:Hello world enter.
卸載時就可在屏幕上看到如下信息:hello world exit.
[root@JiaKun moletest]# rmmod hello.ko
[root@JiaKun moletest]#
Message from syslogd@ at Sat Jul 26 19:52:58 2008 ...
JiaKun kernel: Goodbye, cruel world

另外,如果有多個文件,則按下列方式編寫Makefile文件(file1.c、file2.c):
obj -m := molename.o
mole-objs := file1.o file2.o

『伍』 win8.1用什麼編譯軟體好呢 基礎c語言編譯。 vc++6.0試過不兼容。 滿意加分。

我也是Win8.1,電腦上有兩種編譯器。一種是VC,在網上找到了讓它兼容的辦法。一種是學「C語言也能幹大事」視頻,教了用一種文本編輯器自己搭建編譯環境。詳情可追問

『陸』 交叉編譯的基礎知識

在做實際工作之前,我想我們應該先掌握一些關於交叉編譯的基本知識,其實說白了也就是理解一些我們經常會碰到的英文單詞:
宿主機(host) :編輯和編譯程序的平台,一般是基於X86的PC機,通常也被稱為主機。
目標機(target):用戶開發的系統,通常都是非X86平台。host編譯得到的可執行代碼在target上運行。
prefix: 交叉編譯器的安裝位置。
xxx-xxxx-xxxxx 平台描述。
我們在主機平台上開發程序,並在這個平台上運行交叉編譯器,編譯我們的程序;而由交叉編譯器生成的程序將在目的平台上運行。這里值得說明得是平台描述,像arm-linux、i386-pc-linux2.4.3這樣的字元串我們經常會看到,其實它是用來描述平台的,它有完整格式、縮減格式和別名之分。完整格式是:CPU-製造廠商-操作系統,如sparc-sun-sunos4.1.4,說明平台所使用的CPU是sparc,製造廠商是sun,上面運行的操作系統是SunOS,版本是4.1.4。當然,我們都不願記這么長的東西,因此可以使用短格式,短格式中有選擇地去除了製造廠商、軟體版本等信息,因此我們同樣可以用sparc-sunos或sparc-sunos-sunos4來描述這個平台。如果覺得這個還是太麻煩,那就可以使用別名,sun4m就可以很簡單地描述這個平台。需要注意的是,並不是所有的平台都有別名,也不是所有的短格式都可以正確地描述平台。

『柒』 現在的軟體是用軟體生產出來的,那麼最基礎的編譯程序和操作系統是怎麼製作出來的

Linux的源代碼,全是C和C++實現的,然後用GCC編譯,只有最核心的部分可能涉及匯編開發。C語言編譯器GCC是怎麼實現的呢?用C寫的, 網上有源代碼下載 ,都是用舊版的GCC編譯的…… 那最舊版的GCC是用什麼寫的呢?據說也是用C寫的,用別的C編譯器來編譯。於是你又要問最早的C編譯器是用什麼寫的諸如此類問題……於是,這樣就剩下最早的操作系統和編譯系統是用什麼開發的問題了,的確那才是直接用機械語言寫的。真正用機械語言/匯編語言實現的系統很少,但最早必須忍受這種痛苦,幸好只需要實現最簡單、最基本的功能,有了第一個編譯器,就可以用來編譯更先進的編譯器了。這裡面有個很有趣的過程,最早用機械語言開發的是簡單版的匯編編譯器,功能極少,然後用來編譯一個功能更多的匯編語言編譯器,但仍不是匯編語言的全部功能,如此滾雪球一樣滾出一個真正的匯編語言編譯器。之後可以用這個匯編語言編譯器編譯出第一個C Tiny編譯器,那是C語言的一個極小的子集,之後又用滾雪球的方法滾出真正C語言的編譯器。這個課題叫「編譯器自舉」,在編譯原理中有介紹。
希望採納

『捌』 基礎java程序編譯過了,執行時出現下列情況

試試輸入java和javac兩個命令,看看環境弄好沒?

『玖』 學習編譯原理,需要什麼基礎

編譯原理內容包括語言和文法、詞法分析、語法分析、語法制導翻譯、中間代碼生成、存儲管理、代碼優化和目標代碼生成。
主要是講怎麼做程序的編譯器。

需要數學基礎和很強的邏輯思維。

編譯原理里的字元閉包是指有限循環。關於閉包這些名詞解釋,你們的課程應該有離散數學吧?會有對這些概念的解釋。

編譯原理這書啊。得花老大精力去看了。每一行都會是至關重要的。如果你漏看了哪一節,或許接下來看到的新字母就不知道是什麼意思了。

所以要反復看,反復用邏輯思維推敲。做習題,習題類型也就幾種,做熟了就很簡單

熱點內容
php花生 發布:2025-05-14 12:54:30 瀏覽:549
java人才 發布:2025-05-14 12:29:10 瀏覽:649
如何打開軟密碼 發布:2025-05-14 12:28:55 瀏覽:427
七牛存儲待遇 發布:2025-05-14 12:27:20 瀏覽:422
C語言a35a4a5 發布:2025-05-14 11:53:48 瀏覽:813
android隱藏item 發布:2025-05-14 11:43:56 瀏覽:328
javawebeclipse編譯 發布:2025-05-14 11:35:24 瀏覽:938
可編程式控制制器試題 發布:2025-05-14 11:25:32 瀏覽:121
dsp混合編程 發布:2025-05-14 11:23:10 瀏覽:250
mysql添加存儲過程 發布:2025-05-14 11:23:01 瀏覽:882