當前位置:首頁 » 編程軟體 » kernel交叉編譯

kernel交叉編譯

發布時間: 2023-07-12 04:24:23

A. 如何使用linux交叉編譯

採用交叉編譯的主要原因在於,多數嵌入式目標系統不能提供足夠的資源供編譯過程使用,因而只好將編譯工程轉移到高性能的山早主機中進行。
linux下的交叉編譯環境重要包括以下幾個部分:
1.對目標系統的編譯器gcc
2.對目標系統的二進制工具binutils
3.目標系統的標准c庫glibc
4.目標系統的linux內核頭文件
交叉編譯環境的建立步驟
一、下載源代碼 下載包括binutils、gcc、glibc及linux內核的源代碼(需要注意的是,glibc和內核源代碼的版本必須與目標機上實際使用的版本保持一致),並設定shell變數PREFIX指定可執行程序的安裝路徑。
二、編譯binutils 首先運行configure文件,並使用--prefix=$PREFIX參數指定安裝路徑,使用--target=arm-linux參數指定目標機類型,然後執行make install。
三、配置linux內核頭文件
首先執行make mrproper進行清理工作,然後執行make config ARCH=arm(或make menuconfig/xconfig ARCH=arm)進行配置(注意,一定要在命令行中使用ARCH=arm指定cpu架構,因為預設架構為主機的cpu架構),這一步需要根據目標機的實際情況進行詳細的配置,筆者進行的實驗中目標機為HP的ipaq-hp3630 PDA,因而設置system type為SA11X0,SA11X0 Implementations中選擇Compaq iPAQ H3600/H3700。
配置完成之後,需要將內核頭文件拷貝到安裝目錄: cp -dR include/asm-arm $PREFIX/arm-linux/include/asm cp -dR include/linux $PREFIX/arm-linux/include/linux
四、第一次編譯gcc
首先運行configure文件,使用--prefix=$PREFIX參陪搭數指定安裝路徑,使用--target=arm-linux參數指定目標機類型,並使用--disable-threads、--disable-shared、--enable-languages=c參數,然後執行make install。這一步將生成一個最簡的gcc。由於編譯整個gcc是需要目標機的glibc庫的,它現在還不存在,因此需要首先生成一個最簡的gcc,它只需要具備編譯目標機glibc庫的能力即可。
五、交叉編譯glibc
這一步驟生成的代碼是針對目標機cpu的,因此它屬於一個交叉編譯過程。該過程要用到linux內核頭文件,默認路徑為$PREFIX/arm-linux/sys-linux,因而需要在$PREFIX/arm-linux中建立一個名為sys-linux的軟連接,使其內核頭文件所在的include目錄;或者,也可以在接下來要執行的configure命令中使用--with-headers參數指定linux內核頭文件的實際路徑。
configure的運蘆唯拿行參數設置如下(因為是交叉編譯,所以要將編譯器變數CC設為arm-linux-gcc): CC=arm-linux-gcc ./configure --prefix=$PREFIX/arm-linux --host=arm-linux --enable-add-ons 最後,按以上配置執行configure和make install,glibc的交叉編譯過程就算完成了,這里需要指出的是,glibc的安裝路徑設置為$PREFIXARCH=arm/arm-linux,如果此處設置不當,第二次編譯gcc時可能找不到glibc的頭文件和庫。
六、第二次編譯gcc
運行configure,參數設置為--prefix=$PREFIX --target=arm-linux --enable-languages=c,c++。
運行make install。
到此為止整個交叉編譯環境就完全生成了。
幾點注意事項
第一點、在第一次編譯gcc的時候可能會出現找不到stdio.h的錯誤,解決辦法是修改gcc/config/arm/t-linux文件,在TARGET_LIBGCC2_CFLAGS變數的設定中增加-Dinhibit_libc和-D__gthr_posix_h。

B. 三、內核&文件系統編譯

一、編譯官方提供的內核源碼

1、解壓官方提供的內核源碼包

2、根據官方提供的配置文件對內核進行配置,方式如下
make  ARCH=arm      xxxxx_defult_config
cp   arch/arm/xxxxx_config    .config

3、打開圖形界面對內核進行配置,根據需要增加或者刪除模塊和其他內容

4、對內核進行編譯
make  ARCH=arm    CROSS_COMPILE=arm-hisiv300-linux-uclibcgnueabi-    uImage  -j6
或者編輯Makefile文件,對其中的ARCH變數和CROSS_COMPILE變數進行修改,然後執行make uImage

5、在編譯編譯的時候回出現mkimage命令缺失,這個命令是UBootr提供的,在編譯的UBoot路徑下面找到這個命令,即可直接使用

6、編譯的時候各個方面需要一致性,
                1、編譯的內核的交叉編譯工具鏈如果支持硬體浮點數運算那麼在配置內核的時候也需要添加硬體浮點數的支持
                        Kernel Features --->
                            [*] Use the ARM EABI to compile the kernel
                2、在編譯的內核的時候注意保持不要做太多的修改,否則會出問題

7、編譯內核模塊
    make  ARCH=arm    CROSS_COMPILE=arm-hisiv300-linux-uclibcgnueabi-    moles  -j6

8、安裝內核模塊到指定的目錄中去
make moles_install ARCH=arm CROSS_COMPILE=arm-hisiv300-linux-uclibcgnueabi- INSTALL_MOD_PATH=/home/fu/hisi/kernel/build

9、不要採用內核模塊安裝的命令來安裝內核,因為內核不需要安裝,在arch/arm/boot/uImage就是所需要的內核文件

二、編譯官方提供的busybox來構建根文件系統

1、解壓需要編譯的busybox源碼

2、進入源碼中對busybox進行配置,主要是配置交叉編譯工具鏈
Busybox Settings --->Build Options ---> 下面有關於busybox是否配置為採用共享庫的模式,還有添加交叉編譯工具鏈的前綴

3、配置需要的文件和命令進行添加或者刪除

4、然後執行命令make -jn   && make install

5、創建根文件系統需要的其他的文件和目錄,在一個空白的目錄中首先拷貝busybox/_install下面的bin、sbin、usr目錄到空白目錄中,在空白目錄中創建其餘的所需要的目錄文件 bin dev etc home lib linuxrc mnt opt proc sbin sys tmp usr var等以上目錄

6、接下來在lib目錄中復制內核模塊,在編譯內核的時候模塊安裝在了指定的地方,直接拷貝過來就行。

6、創建文件系統所需要的其他文件,配置文件(最簡單的辦法就是直接復制busybox文件下面的example文件夾裡面的東西)
1、/etc/inittab     填寫或者    一下是最基本的,還有其他的需要填寫
# /etc/inittab
::sysinit:/etc/init.d/rcS                    //指定初始化腳本
::askfirst:-/bin/sh                            //指定第一次輸入回車後打開的shell
::ctrlaltdel:/sbin/reboot                //指定這三個按鍵按下後的反應
::shutdown:/bin/umount -a -r        //指定關機是進行的操作

2、/etc/init.d/rcS                //這個就沒有詳細額硬性規定了,寫入需要初始化的東西即可
#!/bin/sh
mount -a

3、/etc/fstab                        //寫入mount -a是要自動掛載的文件系統
# device mount-point type options mp fsck order
proc          /proc        proc  defaults        0    0
tmpfs          /tmp        tmpfs  defaults        0    0

7、拷貝需要用到的庫文件,在交叉編譯工具鏈下面存放
arm-linux-xxxxxx-gcc/lib
海思的開發板是在和tahet/lib下面,切記。

C. 弄好的內核模塊怎麼弄進開發板裡面去啊(我已經用交叉編譯器德到了.ko文件)

這些是初學者經常遇到的問題。我以前也遇到過,所以還是我來回答你吧。首先rz命令是BusyBox裡面是不帶的,如果你要用就要另外下載一個rz,然後用arm編譯之後再放到開發板/bin目錄下面。但是我不推薦用rz,速度很慢的。最方便的還是掛載網路文件系統了,如果使用uboot命令如下:
#setenv bootargs "root=/dev/nfs nfsroot=192.168.0.宿主機文件系統路徑:/forlinx/root
ip=192.168.0.開發板:192.168.0.宿主機:255.255.255.0 console=ttySAC0,115200"
#saveenv
使用網路文件系統要確保網卡可用!可以在UBOOT下先PING下主機IP;
我的QQ285226942,還要問題的話咱們可以繼續探討

D. 如何使用ARM+Cortex-A9的移植一個Linux操作系統,作為伺服器

要在ARM Cortex-A9上移植Linux操作系統並將其用作伺服器,需要執行以下步驟:

  • 選擇適當的Linux發行版:首先,需要選擇適合ARM Cortex-A9的Linux發行版。一些流行的ARM Linux發行版包括Ubuntu、Debian、Fedora、OpenSUSE等。您可以從官方網站下載適合您的ARM Cortex-A9的版本。

  • 下載交叉編譯工具鏈:由於ARM Cortex-A9是基於ARM架構的,因此需要使用交叉編譯工具鏈來編譯Linux內核和應用程序。您可以從ARM官方網站下載適合您的交叉編譯工具鏈。

  • 編譯內核:使用交叉編譯工具鏈編譯Linux內核。您可以從Linux內核官方網站下載最新版本的內核源代碼,並使用交叉編譯工具鏈進行編譯。編譯完成後畝塵,將內核鏡像文件復制到ARM Cortex-A9的啟動設備中。

  • 配置文件系統:在ARM Cortex-A9上運行Linux操作系絕耐敏統需要一個文件系統。您可以使用BusyBox等工具來創建一個最小的文件系統。將文件系統復制到並枝ARM Cortex-A9的啟動設備中。

  • 啟動Linux操作系統:將啟動設備插入ARM Cortex-A9,並將其連接到計算機。使用串口或SSH等工具連接到ARM Cortex-A9,並啟動Linux操作系統。如果一切正常,您應該能夠登錄到Linux系統並使用它作為伺服器。

  • 配置伺服器:根據您的需求配置Linux伺服器。您可以安裝Web伺服器、資料庫伺服器、FTP伺服器等,以滿足您的需求。

E. linux編譯內核出現arm-linux-gcc command not found ,用yum安裝,nothing to do ,繼續編譯,同樣的錯誤

首先呢,交叉編譯環境,不是通過伺服器來安裝的。
將交叉編譯環境解壓到指定目錄,然後設置好環境
最後驗證安裝成功否:arm-linux-gcc -v 查看下版本
確認好才能進一步操作。
添加環境變數:export PATH=$PATH:/home/frankie/usr/..../bin(直到添加到bin目錄才行)

F. 怎麼查看Linux下系統的內核,交叉編譯,文件系統的版本

一般交叉編譯器里都有一個lib的文件夾的,把你的lib文件cp到這里應該就可以了。也可以用gcc帶的-l,例如:arm-linuc-gcc
-l/root/lib
xx.c
-o
xx.o

G. linux各個內核版本與交叉編譯器版本的對應問題。這個是怎麼對應的。我怎麼知道我的內核需要那個編譯器。

一般來說越新的內核用越新的交叉編譯器,你不用知道怎麼選擇,網上都有大量的現成例子,你這個3.4.1和4.4.3 都跳了一個重大改版了,也許你這個3.4.1隻能編譯通過2.4.xxx的內核,交叉編譯器在編譯的時候涉及到對一些代碼的優化,2.4內核 和2.6內核差了很多,這個你也知道!

熱點內容
流控腳本破解 發布:2025-02-07 08:39:09 瀏覽:413
什麼是資源為什麼要研究資源配置 發布:2025-02-07 08:25:19 瀏覽:87
釣魚網站源碼製作 發布:2025-02-07 08:23:54 瀏覽:139
mac運行fl需要什麼配置 發布:2025-02-07 08:15:45 瀏覽:573
安卓怎麼做都比不了蘋果 發布:2025-02-07 08:12:47 瀏覽:238
怎麼給物理機配置ip地址 發布:2025-02-07 08:01:37 瀏覽:139
三國志13未加密 發布:2025-02-07 07:54:37 瀏覽:926
馬斯克中國訪問 發布:2025-02-07 07:54:29 瀏覽:102
資料庫有表 發布:2025-02-07 07:50:49 瀏覽:29
基於nginx搭建圖片伺服器原理 發布:2025-02-07 07:44:18 瀏覽:449