我們寫了 linux 上第一個 c 程序 heollo world ,是使用 gcc 編譯器進行代碼的編譯,編譯得到的可執行文件只能在 X86 結構的 PC 上運行,不能在開發板上運行,如果要在 arm 開發板上運行,則需要交叉編譯這個 C 程序。 什么是交叉編譯呢? 如果我們想在 ARM 上運行,就要使用 ARM 的編譯器,然后在 X86 上進行編譯。因為我們使用 ARM 的編譯器編譯完了之后,是把我們的可執行程序放到開發板上來運行,而不是在 PC 上運行的,這個過程大家可以把它理解成交叉,然后再和我們的編譯器結合起來就叫做交叉編譯器。 接下來我們來看下,如何來交叉編譯 C 程序呢?首先我們要安裝交叉編譯器,RK3399 的 Linux 系統的交叉編譯器并未單獨提供,是和 Linux 的 BSP 源碼包一起提供的,路徑為“iTOP-3399 開發板/01_iTOP-3399光盤資料/20210512/05 Linux 源碼”。所以我們只需要在環境變量里面把在 BSP 源碼包提供的交叉編譯器加到環境變量里面或者直接使用絕對路徑編譯即可。 我們現在 ubuntu 系統的任意目錄下創建一個 hello.c 文件 ,這個程序也非常簡單,就是一個 helloworld ,我們來編譯一下,然后運行下可執行文件,這個可執行文件可以在 PC 上運行的。如下圖所示。 ![]() 然后我們使用 file 命令來看下這個文件,這個文件可以在 X86 上運行的,但是它不能在 ARM 上運行,因為它這里寫的是 X86。如下圖所示。 ![]() 接下來我們來設置并使用交叉編譯器編譯。這里一共有倆種方法,我們先來看第一種方法。 方法一: 把 Linux 的 BSP 源碼包中的交叉編譯器添加到環境變量中去,然后使用交叉編譯器編譯。 1 作者將資料中的 rk3399_linux_sdk_v2.0 源碼放于 Ubuntu16.04 的/home/work/3399/linux/no_ai/目錄下(此路徑沒有要求,大家可自行任意放置), 如下圖所示: ![]() 2 交叉編譯工具在 linux 源碼 rk3399_linux_sdk_v2.0 中 prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin 目錄下,如下圖所示: ![]() 所以我們設置臨時環境變量如下圖所示: export PATH=/home/work/3399/linux/no_ai/rk3399_linux_sdk_v2.0/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-20 17.05-x86_64_aarch64-linux-gnu/bin ![]() 如下圖所示: ![]() 注意:/home/work/3399/linux/no_ai/rk3399_linux_sdk_v2.0/此路徑是自己 Linux 源碼所放置的路徑,大家依據自己的實際路徑改寫。 檢查是否添加成功 echo $PATH 如下圖所示 ![]() 從圖中我們可以發現,環境變量 PATH 里面已經有了我們交叉編譯的路徑,所以我們可以繼續往下進行。 注意! 第一步設置交叉編譯工具是設置臨時環境變量,只在當前設置的窗口有效,如果第一步設置交叉編譯工具的窗口關閉了,請按照第一步再次打開并設置環境變量 回到 hello.c 所在的路徑,使用命令交叉編譯 hello.c ![]() 輸入命令“file hello” ,如下圖所示: ![]() 此時我們編譯出來的可執行文件就是 arm 的了,就可以在開發板上運行了。 方法二: 不設置環境變量,直接使用絕對路徑編譯。 我 們 要 使 用 的 交 叉 編 譯 器 aarch64-linux-gnu-gcc , 在 虛 擬 機 ubuntu 的/home/work/3399/linux/no_ai/rk3399_linux_sdk_v2.0/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05- x86_64_aarch64-linux-gnu/bin 這個路徑下,所以我們可以直接使用絕對路徑找到這個編譯器來編譯,回到hello.c 所在的路徑,使用命令交叉編譯 hello.c 如下圖所示: ![]() 同樣我們也可以編譯出來可執行文件 hello,但是需要注意的是,編譯器所在的絕對路徑以大家電腦上的實際路徑為準。 總結 方法一步驟較多,但是輸入命令短小精悍。方法二輸入命令路徑很深,每次編譯很繁瑣,但是不受環境變量影響。兩個方法均可實現交叉編譯。大家可權衡選擇。 ![]() ![]() 核心板參數 尺寸:6.5*5.5cm 高度:連同連接器在內0.26cm CPU:Rockchip RK3399 28納米HKMG制程 雙核Cortex-A72 1.8/2.0GHz;四核Cortex-A53 1.4GHz 內存:2GB 雙通道DDR3(4GB可選) 存儲:16GB EMMC 電源管理:官方推薦RK808芯片 工作電壓:3.3V供電 系統支持:Android8.1系統;Ubuntu16.04系統;Debian9系統 接口:支持雙USB3.0 Type-C接口;支持PCIe 2.1 (4 full-duplex lanes );內置低功耗MCU;8路數字麥克風陣列輸入 引角擴展:引出腳多達320個,滿足用戶各類擴展需求 多媒體:支持4K VP9 and 4K 10bits H265/H264 視頻解碼,高達60fps;1080P 多格式視頻解碼 (VC-1, MPEG-1/2/4, VP8) 運行溫度:0度至+80度區間,設備工作正常,運行良好! 應用范圍:可廣泛用于人臉識別設備、無人機、機器人、游戲終端、廣告機/一體機、金融POS類、車載控制業、云端服務、VOIP視頻會議系統、醫療類、安防/監控/警務、工控類、IoT物聯網領域、VR等近百行業應用產品。 底板參數 尺寸:19cm*12cm PCB板:4層 POWER:電直流電源輸入接口,12V/2A電源輸入 GPS模塊:支持(選配) SWITCH:電源開關 WIFI/BT:雙頻2.4G/5G WIFI、Bluetooth4.1二合一模塊 HDMI接口:1路 HDMI2.0輸出接口 EDP LCD:1路 Type-C:1路 Type-C USB3.0接口,兼容OTG功能 MIPI_TX:1路 TF卡槽:1個 MIPI_TX/RX:1路 USB HOST:4路 USB2.0接口;1路 USB3.0接口; SPDIF:光纖輸出接口 串口:2路RS232串口 BUZZER 1個蜂鳴器 網口:1路千兆以太網(10/100/1000Mbps) RTC:實時時鐘 IRDA:1個 GPIO接口:20PIN,包括1路SPI和2路I2C SIM卡槽:1個 LED:3個 PHONE:支持耳機輸出 PCIE:PCIE M.2接口 MIC:支持MIC輸入 陀螺儀:支持 按鍵:6個 電子羅盤:支持 4G模塊:全網通(選配) 光線傳感器:支持 CAMERA接口:CAMERA 1路、MIPI CAMERA 1路 |