㈠ x86的應用程序內存訪問時是編譯時固定一個地址還是運行時根據狀況再計算(我是指物理內存地址),謝謝。
編譯時給定的是相對地址,運行時根據內存的實際情況給定基址。[給定基址就是系統為正在運行的程序分配內存]
放棧上的變數啊,堆里的動態內存啊都是每次運行有可能放在不同的地方。
但是,一些運行環境數據(庫函數)是會實現載入到指定內存的(這個是放在指定內存的)
——————————————————————
還有不要把虛擬內存和上面的混淆了,MMU是實現虛擬地址————>物理地址的轉換
這個就算硬體不支持虛擬內存,程序數據每次運行都很可能放在不同的內存中
㈡ 為什麼x86和arm的架構不同,但是都能裝linux呢,他們的編譯時如何實現的。
rm架構和x86架構區別:
一、性能:
X86結構的電腦無論如何都比ARM結構的系統在性能方面要快得多、強得多。X86的CPU隨便就是1G以上、雙核、四核大行其道,通常使用45nm(甚至更高級)製程的工藝進行生產;
而ARM方面:CPU通常是幾百兆,最近才出現1G左右的CPU,製程通常使用不到65nm製程的工藝,可以說在性能和生產工藝方面ARM根本不是X86結構系統的對手。
但ARM的優勢不在於性能強大而在於效率,ARM採用RISC流水線指令集,在完成綜合性工作方面根本就處於劣勢,而在一些任務相對固定的應用場合其優勢就能發揮得淋漓盡致。
二、擴展能力:
X86結構的電腦採用「橋」的方式與擴展設備(如:硬碟、內存等)進行連接,而且x86結構的電腦出現了近30年,其配套擴展的設備種類多、價格也比較便宜,所以x86結構的電腦能很容易進行性能擴展,如增加內存、硬碟等。
ARM結構的電腦是通過專用的數據介面使CPU與數據存儲設備進行連接,所以ARM的存儲、內存等性能擴展難以進行(一般在產品設計時已經定好其內存及數據存儲的容量),所以採用ARM結構的系統,一般不考慮擴展。基本奉行「夠用就好」的原則。
三實現編譯:
因為linux是系統,他支持現在大多數的結構體系。而要使他移植到相應的不同的硬體平台上時,需要對內核源碼進行相對應的交叉編譯處理,然後才能進行燒寫運行,因為都有驅動只要那個系統有對應平台的驅動就可以。
(2)麒麟x86編譯問題擴展閱讀:
Linux常用命令
1、pwd命令該命令的英文解釋為print working directory(列印工作目錄)。
2、輸入pwd命令,Linux會輸出當前目錄。
3、cd命令cd命令用來改變所在目錄。
4、cd / 轉到根目錄中
5、cd ~ 轉到/home/user用戶目錄下
6、cd /usr 轉到根目錄下的usr目錄中-------------絕對路徑
7、cd test 轉到當前目錄下的test子目錄中-------相對路徑
8、cat命令可以用來合並文件,也可以用來在屏幕上顯示整個文件的內容。
9、cat snow.txt 該命令顯示文件snow.txt的內容,ctrl+D退出cat。
㈢ vs2005 anycpu更改為x86後,插件編譯不通過咋回事
有可能代碼中的預編譯的代碼
即#define...
#if
之類的
㈣ 大家編譯一個x86的Linux內核需要多長時間
make
時加參數
-jX
X
是你的
CPU
核心數量
+1
。
可以加快你的編譯速度。
我的本本
T5450
編譯需要
10
分鍾。我的內核是針對機器剪裁了的。不剪裁的全功能內核貌似我就需要
30
分鍾了。
㈤ x86 平台編譯的二進制包是否都不能運行在樹莓派中
firmware:樹莓派的交叉編譯好的二進制內核、模塊、庫、bootloader
linux:內核源碼
tools:編譯內核和其他源碼所需的工具——交叉編譯器等
我們只需要以上三個文件即可,下面的工程可以了解一下
documentation:樹莓派離線幫助文檔,教你如何使用、部署樹莓派(樹莓派官方使用教程)
userland:arm端用戶空間的一些應用庫的源碼——vc視頻硬浮點、EGL、mmal、openVG等
hats:Hardware Attached on Top,樹莓派 B+型板子的擴展板資料
maynard:一個gtk寫成的桌面環境
scratch:一個簡易、可視化編程環境
noobs:一個樹莓派鏡像管理工具,他可以讓你在一個樹莓派上部署多個鏡像
weston:一個應用程序
target_fs:樹莓派最小文件系統,使用busybox製作
quake3:雷神之錘3有線開發源碼firmwareb
2)下載方法:
a、網頁直接下載:
點到所需要下載的工程,左上角選版本,右方有一個download ZIP按鈕可直接下載(筆者下載完成後,在linux中解壓提示出錯,windows又非常慢切內核建議不要在windows環境解壓,所以筆者不建議使用這種辦法)
b、使用git下載
$ mkdir raspeberrypi_src
$ cd raspberrypi_src
$ git clone git://github.com/raspberrypi/firmware.git
$ git clone git://github.com/raspberrypi/linux.git
$ git clone git://github.com/raspberrypi/tools.git
會得到三個文件夾:
firmware linux tools
2、編譯、提取內核及其模塊
1)獲得內核配置文件
在運行的樹莓派中運行:
$ls /proc/
可看到一個叫config.gz的文件,他是當前的樹莓派配置選項記錄文件,我們將他拷出,放入我們的內核源碼目錄樹下
$cp /proc/config /home/pi
我們這里使用前面交過的samba拷出並拷入內核源碼目錄下,不熟悉的人可參考前面文章
在linux內核源碼下執行:
$zcat config.gz > .config
2)配置、編譯內核
a、修改內核源碼makefile ARCH類型和編譯器路徑
$vi Makefile +195
找到以上類似代碼,改為如圖所示
b、查看、修改配置選項
$make menuconfig
可出現以下界面
如果不做修改,直接選中exit即可(注意使用鍵盤操作)
c、編譯內核鏡像
$make
在arch/arm/boot目錄下可以看到一個叫zImage的文件,就是我們新的內核
但是樹莓派需要另外一種格式的鏡像,需要進行處理一下,執行以下命令
$cd tools/mkimage
$./imagetool-uncompressed.py ../../linux/arch/arm/boot/zImage
即可在當前文件夾下看到一個叫:kernel.img的文件,就是我們需要的新內核了
d、提取moles
上一步其實不但編譯出來了內核的源碼,一些模塊文件也編譯出來了,這里我們提取一下
$cd raspberrypi_src
$mkdir moles
$cd linux
$ make moles_install INSTALL_MOD_PATH=../moles
即可在moles得到我們需要的模塊文件
2、升級RPi的kernel、Firmware、lib
將SD卡拔下插在電腦上(可使用讀卡器)
1)升級內核
將新編好的內核拷入SD卡,改名為:kernel_new.img
打開boot目錄下
找到config.txt文件,加入:kernel=kernel_new.img這一行
2)升級boot
將firmware/boot/目錄下 以下文件拷入SD卡boot目錄:fbootcode.bin fixup.dat fixup_cd.dat start.elf
3)更新vc庫及內核moles
將第3步d步中編譯出來的moles/lib/moles拷入樹莓派文件系統/lib下
㈥ 求高手解答:linux系統編譯問題
configure是每個源碼包里自帶的配置腳本,它會自動檢查你的系統是否滿足編譯這個軟體所需要的條件(比如,編譯器是否安裝,用到的頭文件是否有,等等),並進行一些相關配置。
一般來說 ./configure後面帶的參數主要是用來設置編譯和安裝這個軟體時的一些相關參數,如果你不在 ./configure後面提供,那麼編譯、安裝的時候就使用軟體默認的設置。
最常見的參數就是 --prefix,指定安裝軟體的目錄 (如果不指定,應該是默認為 /usr/local)。另外還有一些比方設置庫路徑,文檔安裝路徑等參數 (這些參數一般各個軟體都支持),還有一些是軟體特有的配置參數,比如啟用或者禁用某個特殊的功能等。具體每個軟體的configure腳本支持哪些參數,可以用
./configure --help 的方法來查看。
第二個問題,./configure出錯,一般來說就是你的系統不滿足這個軟體安裝的要求,導致configure腳本檢測出無法正確配置,如我上面說的,比方你沒安裝編譯器或者編譯器版本有問題,或者是缺少某個頭文件,或者是缺少某些庫等等,具體是什麼問題,要看 ./configure 出錯的提示了。
㈦ linux 下用arm體系QT編譯問題(目前我系統里有X86 和 arm體系(老師編好的)的QT各一個)
貌似是缺少系統庫,有些版本的linux編譯qt是會出現缺少系統庫而導致編譯不成功的問題,不是很推薦用最新的編譯器來編譯,其實2.4的內核和3.4.5的編譯器做qt就已經足夠了,你可以去查查看那些版本的linux下可以成功的編譯qt,安裝的時候盡可能把開發用的庫都選上,不然就只有自己再去打補丁,
僅作參考
㈧ x86是處理特定指令集的cpu, 就像編譯器一樣,有多個版本,那麼哪些軟體能在x86下運行呢
你知道不,你連門都沒摸到,不要說登堂入室了。
問得驢頭不對馬嘴。次序混亂,自取煩惱。
㈨ 我編譯的程序,是為x86和x64,兩者的性能差別有點大。這是什麼原因呢
理論上x64可以兼容x84的軟體 但發揮不出顯著性能提升 x64對內存的管理、利用強大些,
㈩ 求教編譯openwrt x86,usb啟動不成功
Make kernel_menuconfig
Device Drivers --->
SCSI device support --->
(Although SCSI will be enabled automatically when selecting USB Mass Storage,
we need to enable disk support.)
--- SCSI support type (disk, tape, CD-ROM)
<*> SCSI disk support
(Then move back a level and go into USB support)
USB support --->
(This is the root hub and is required for USB support.
If you'd like to compile this as a mole, it will be called usbcore.)
<*> Support for Host-side USB
(Select at least one of the HCDs. If you are unsure, picking all is fine.)
--- USB Host Controller Drivers
<*> EHCI HCD (USB 2.0) support
< > OHCI HCD support
<*> UHCI HCD (most Intel and VIA) support
(Moving a little further down, we come to CDC and mass storage.)
< > USB Modem (CDC ACM) support
<*> USB Printer support
<*> USB Mass Storage support
(If you have a USB Network Card like the RTL8150, you'll need this)
USB Network Adapters --->
<*> USB RTL8150 based ethernet device support (EXPERIMENTAL)
(If you have a serial to USB converter like the Prolific 2303, you'll need this)
USB Serial Converter support --->
<*> USB Serial Converter support
<*> USB Prolific 2303 Single Port Serial Driver (NEW)
選上這些,,,再編譯一次固件就可以了。