SOCFPGA開發之linux開發環境搭建和編譯鏡像

2022-01-09 FPGA那點事兒

記錄1,安裝yocto,編譯kernel等

$ sudo apt-get update

$ sudo apt-get upgrade

$ sudo apt-get install sed wget cvssubversion git-core coreutils unzip texi2html texinfo libsdl1.2-devdocbook-utils gawk python-pysqlite2 diffstat help2man make gcc build-essentialg++ desktop-file-utils chrpath libgl1-mesa-dev libglu1-mesa-dev mercurialautoconf automake groff libtool xterm

$ sudo apt-get install uboot-mkimage

// Within directory where linux-socfpga-13.02-RC10-src.bsxresides, run the following command to install the package to /opt/altera-linux directory.

//如果執行下面的命令失敗,請檢查文件是否可執行,或直接使用$chmod 777 filename 修改文件屬性

$ sudo ./linux-socfpga-13.02-RC10-src.bsx

//Now run this command (NOT as root) to install Yocto. Yocto will be installeda user’s root directory. For instance, in /home/harvey.

$/opt/altera-linux/bin/install_altera_socfpga_src.sh ~/yocto

// A new build directory has been createdwith a conf subdirectory. This contains the default configuration for buildingfor altera hardware. You can modify the conf/local.conf file to adjust varioussettings, such as building with an initramfs.Not as root

注意,需要在/home/harvey/yocto/目錄下運行下面的命令,每次重啟linux後都需要運行一次下面的命令************

$ source /home/harvey/yocto/altera-init /home/harvey/yocto/build

運行上面的命令後,linux 相關代碼尚未有展開到build的子目錄中



// we could use the following command tobuild kernel, ramdisk, and so on.

bitbakevirtual/kernel //In order to build linux

bitbakevirtual/bootloader //In order to build u-boot

bitbakealtera-image //In order to build the root filesystem

// 編譯所有鏡像的命令

$ bitbake virtual/kernel virtual/bootloaderaltera-image

記錄2,可以在yocto/build/tmp/deploy/images目錄下直接執行下面的命令來生成燒寫SD卡的鏡像文件。***************

Linux啟動需要的文件包括preloader、uboot、根文件系統、linuxkernel和dtb文件。

$ cd ~/yocto/build/tmp/deploy/images

$ sudo/opt/altera-linux/bin/make_sdimage.sh -kuImage,socfpga_cyclone5.dtb -p u-boot-spl-socfpga_cyclone5.img -b u-boot-socfpga_cyclone5.img -r~/yocto/build/tmp/work/socfpga_cyclone5-poky-linux-gnueabi/altera-image-1.0-r0/rootfs -o sd_image.bin

注意,直接生成的sd卡鏡像有問題,在把鏡像燒寫到sd卡後使用下面的命令將yocto/build/tmp/deploy/images 中的ext3 格式的rootfs 覆蓋到sd卡中。

:dd if=altera-image-socfpga_cyclone5-20130806020207.rootfs.ext3of=/dev/sdb2

注意2,需要修改fat32分區中的socfpga_cyclone5.dtb 為socfpga.dtb

注意3,如果sd卡啟動後沒有任何列印信息。請檢查在生成sd卡鏡像時,請檢查preloader,即u-boot-spl*.*文件是否為bin文件,如果是,則需要使用mkpimage為該文件增加頭信息。可以簡單判斷,增加了頭的該文件為256KB或64KB。

記錄3,編譯preloader和uboot

可以在windows下,使用bsp-editor進行編譯preloader和uboot。

其中software文件夾是quartus工程頂層目錄下的文件夾,使用bsp-editor 編譯配置和編譯preloader過程中自動產生的文件夾。



記錄4,編譯設備樹dtb文件

不推薦使用altera的工具軟體生成dts,因為不同版本的linux內核對dts格式的要求不同。當然,版本差異小的話,可能會使用相同的dts文件。

linux內核源碼目錄中有dts文件。建議直接手動修改該dts文件,並使用下面的命令編譯成dtb。

在linux將dts 編譯為dtb文件,在在目錄

/home/harvey/yocto/build/tmp/work/socfpga_cyclone5-poky-linux-gnueabi/linux-altera-3.7-r1/linux-altera-3.7中執行下面的命令可以將dts 編譯為dtb。

/home/harvey/yocto/build/tmp/work/socfpga_cyclone5-poky-linux-gnueabi/linux-altera-3.7-r1/linux-altera-3.7/scripts/dtc/dtc-O dtb -o arch/arm/boot/socfpga_cyclone5.dtb -b 0 -d arch/arm/boot/.socfpga_cyclone5.dtb.darch/arm/boot/dts/socfpga_cyclone5.dts

注意:在linux代碼document 中有各個設備dts數據結構的說明手冊,如下圖。


記錄5:編譯minimal jffs2 文件系統 rootfs

在安裝13.02和13.1 安裝包後,需要運行命令bitbake altera-image-minimal 之後才會產生下面的目錄~/yocto/build/tmp/work/socfpga_cyclone5-poky-linux-gnueabi/altera-image-minimal-1.0-r0/rootfs/

使用下面的命令編譯出了minimal的文件系統,不包括ssh,即無法在ds5下同網絡進行調試

cd~/yocto131/

sourcealtera-init build

bitbake altera-image-minimal

註:使用bitbake altera-image 可以生成normal文件夾,使用bitbake altera-image-minimal可以生成minimal文件夾


*********************因默認編譯的minimal的jffs2 不支持ssh,導致無法使用ds5 調試linux 應用程式*************************************

記錄6:向jffs2 添加ssh ,可以比較minimal和normal的下面文件,並根據normal的文件修改minimal對應的文件,增加ssh的支持。

參考altera-image.bb修改下面的文檔

./meta-altera/recipes-core/images/altera-image-minimal.bb

記錄7, linux下的重要路徑

在linux開發平臺下,uboot代碼路徑

/home/harvey/yocto/build/tmp/work/armv7ahf-vfp-neon-poky-linux-gnueabi/u-boot-altera-2012.10-r0.0/u-boot-altera-2012.10

在window 平臺下,對應的目錄是

D:\work_dir\demos\SOC\helio\software\spl_bsp\uboot-socfpga

文件系統路徑

/home/harvey/yocto/build/tmp/work/socfpga_cyclone5-poky-linux-gnueabi/altera-image-1.0-r0/rootfs

linux內核代碼的路徑

/home/harvey/yocto/build/tmp/work/socfpga_cyclone5-poky-linux-gnueabi/linux-altera-3.7-r1/linux-altera-3.7

Gnu工具鏈所在目錄

/opt/altera-linux/linaro/gcc-linaro-arm-linux-gnueabihf-4.7-2012.11-20121123_linux/bin/

編譯出的所有文件都在目錄/home/harvey/yocto/build/tmp/deploy/images下

altera-image-socfpga_cyclone5.cpio

altera-image-socfpga_cyclone5.ext3

altera-image-socfpga_cyclone5.jffs2

altera-image-socfpga_cyclone5.tar.gz

socfpga_cyclone5.dtb

socfpga_vt.dtb

u-boot-socfpga_cyclone5.bin

u-boot-spl-socfpga_cyclone5.bin

uImage

vmlinux

記錄8:在yocto下編譯.ko ************************

編譯內核模塊:

步驟1,設置yocto環境變量

source /home/harvey/yocto/altera-init /home/harvey/yocto/build

步驟2,設置PATH 變量,增加socfpga的工具鏈目錄

export PATH=$PATH:/opt/altera-linux/linaro/gcc-linaro-arm-linux-gnueabihf-4.7-2012.11-20121123_linux/bin

步驟3,使用make編譯模塊

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

步驟4,加載和卸載模塊

加載執行:insmod hello.ko

卸載命令:rmmod hello.ko

makefile文件內容如下

# Makefile 2.6

obj-m +=test_module.o

KDIR:=/home/harvey/yocto/build/tmp/work/socfpga_cyclone5-poky-linux-gnueabi/linux-altera-3.7-r1/linux-altera-3.7

PWD=$(shell pwd)

all:

make -C $(KDIR) M=$(PWD) modules

clean:

make -C $(KDIR) M=$(PWD) clean

注意:上面的KDIR目錄是內核代碼根目錄。儘管module.h是在linux-altera-3.7-r1/linux-altera-3.7/include/linux/下。

注意:如果在編譯kernel 模塊是遇到下面的錯誤,請檢查makefile 中make -C $(KDIR) M=$(PWD) modules 前面的tab 鍵是否被多個空格代替了。

harvey@ubuntu:~/workplace/kernel_module$make all

make: Nothing to be done for `all'.

代碼文件harvey@ubuntu:~/yocto/build/tmp/test_dir$ cat test_module.c

#include<linux/init.h>

#include<linux/module.h>

#include<linux/kernel.h>

MODULE_LICENSE("DualBSD/GPL");

static int hello_init(void)

{

printk("Hello moduleinit.\n");

return 0;

}

static void hello_exit(void)

{

printk("Goodbye moduleexit.\n");

}

module_init(hello_init);

module_exit(hello_exit);

MODULE_AUTHOR("harvey");

MODULE_DESCRIPTION("a simplemodule");

MODULE_ALIAS("test_module");

遇到的錯誤記錄

錯誤1,編譯模塊是遇到error: void value not ignored as it ought tobe

linux/fs.h頭文件,裡面定義了unregister_chrdev()函數為void 類型,刪除下面語句中的「ret =」。 ret = unregister_chrdev ( Major, DEVICE_NAME );

錯誤2,加載模塊是出現下面的提示,是主設備號衝突,使用命令cat /proc/devices 查看已分配的設備號。

# insmod char_dev_harvey.ko

globalvar registerfailureError: could not insert module char_dev_harvey.ko: Device or resourcebusy

可以用命令創建設備文件:
mknod /dev/設備文件名字符設備(c是字符設備,b是塊設備) 主設備號次設備號
例如:mknod /dev/testChar c 100 0
刪除設備入口:
rm /dev/testChar

記錄9,配置linux內核************************

// configuratelinux kernel, after the following command there'll come up a configure window. Not as root

$bitbake -cmenuconfig linux-altera

記錄10,將鏡像燒寫到sd卡

在linux下可以使用下面的命令經sd卡鏡像燒寫到卡中。

$ sudo dd if=linux-socfpga-12.12-sdimageof=/dev/sdx bs=512

$ sudo sync

注意,在linux下需要使用usb接口的sd卡讀卡器。Linux不能直接識別出sd卡(將大的sd卡插入筆記本的sd卡槽中)。

在windows下使用Win32DiskImager 將sd卡image燒寫到sd卡中

記錄11,使用git工具軟體下載linux內核代碼

Linux4.x使用第二個連結,帶github字樣

https://github.com/altera-opensource/linux-socfpga/

https://github.com/altera-opensource/linux-socfpga/branches

git clonegit://git.rocketboards.org/linux-socfpga.git

git clonegit://git.rocketboards.org/linux-socfpga.git

git clone git://git.rocketboards.org/poky-socfpga.git

git clone git://git.rocketboards.org/u-boot-socfpga.git

git clone git://git.rocketboards.org/linux-refdesigns.git

cd u-boot-socfpga

查看本地分支:$ git branch

查看遠程分支:$ git branch -r

git branch

git checkout -t -b socfpga-3.10 origin/socfpga-3.10

git checkout -t -b socfpga-3.10-ltsi origin/socfpga-3.10-ltsi

git checkout -t -b socfpga-3.11 origin/socfpga-3.11

git checkout -t -b socfpga-3.12 origin/socfpga-3.12

git checkout -t -b socfpga-3.9 origin/socfpga-3.9

切換本地分支

git checkout socfpga-3.10-ltsi

使用遠端版本強制覆蓋本地修改,即放棄本地修改。

git fetch --all

git reset --hardorigin/master

git fetch 只是下載遠程的庫的內容,不做任何的合併 git reset 把HEAD指向剛剛下載的最新的版本

記錄12:編譯git下來的linux內核代碼

需要先設置編譯工具鏈路徑:

exportPATH=$PATH:/opt/altera-linux/linaro/gcc-linaro-arm-linux-gnueabihf-4.7-2012.11-20121123_linux/bin

設置:make ARCH=armCROSS_COMPILE=arm-linux-gnueabihf- LOADADDR=0x8000 socfpga _defconfig

如需要配置linux內核:make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LOADADDR=0x8000 menuconfig

編譯linux 內核:make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LOADADDR=0x8000 uImage

重要記錄:Qspi flash 燒寫

打開命令窗口:E:\altera\14.0\embedded\Embedded_Command_Shell,在本命令窗口中使用下面的命令燒寫代碼到指定的地址處。

quartus_hps -c 1-o PV -a 0x0000 preloader-mkpimage.bin

quartus_hps -c 1-o PV -a 0x60000 u-boot-img.bin

quartus_hps -c 1-o PV -a 0x50000 socfpga-dtb.bin

quartus_hps -c 1-o PV -a 0xa0000 zImage.bin

quartus_hps -c 1-o PV -a 0x800000 minimal-rootfs-jffs2.bin

dts文件中包括jffs2文件系統的位置,參考下圖

/home/harvey/yocto131/build/tmp/work/socfpga_cyclone5-poky-linux-gnueabi/linux-altera-dist-1.0-r1/linux-socfpga/arch/arm/boot/dts


註:版權歸「FPGA那點事兒」運營團隊,轉載請註明出處。


歡迎掃描以下二維碼,關注「FPGA那點事兒」!

相關焦點

  • SoC FPGA 開發和調試筆記 第一篇:閒言碎語話家常
    而AC501-SoC不一樣,AC501-SoC採用的基於Intel Cyclone V SoC FPGA系列的器件,由於架構新穎,上市時間不長,而且由於技術壁壘較高,涉及到了arm嵌入式和fpga開發的雙重技術,所以開發和使用起來難度都比單純的fpga或者arm linux要大一些。參考資料只有官方提供的一些。很多問題網友也沒有遇到,網絡上也不好找解決資源,所以我做的也是比較的艱難和緩慢。
  • Linux 內核學習:環境搭建和內核編譯
    作者:xiongyuanxiong連結:www.cnblogs.com/xiongyuanxiong一、linux內核學習之一:環境搭建--安裝Debian7.3本系列文章假設讀者已對linux有一定的了解,其實學習linux內核不需要有很深的關於linux的知識,只需要了解以下內容:linux基礎知識及基本
  • Linux開發環境實現內核的編譯
    前言:在此貼中,我將本人在使用Linux環境編譯上遇到的問題與大家共同分享,希望能夠對後續開發體驗人員有所借鑑。
  • 鴻蒙開發環境搭建、源碼下載和編譯
    Hi3861開發板開發環境其中,Linux 主機用於源碼下載和編譯,Windows 主機用於燒寫程序以及源碼編輯。相對於虛擬機的優勢Win10子系統WSL(Windows Subsystem for Linux)佔用內存和CPU資源更少,在WSL上運行軟體的消耗和直接在Windows上差不多,而且Windows下可以直接訪問WSL的環境,相較於多系統,文件交互也更為簡單。
  • 國內linux和macos搭建esp32的開發環境
    中進行Arduino或者idf方式開發,platformIO封裝不錯使用官方idf在linux、macos、windows開發最近想了解一下官方SDK的開發方式,在搭建esp32的環境中遇到許多問題。該搭建方案和官方文檔配合查看,部分細節該文檔未列出樂鑫官方文檔GitHub個人網站:國際個人網站:中國第一步:基礎工具安裝在linux或者macos中搭建esp32的環境,先要安裝一些基礎工具,如python等等。macos可以使用Homebrew、macports安裝相關的工具以及依賴。
  • Linux系統下ESP32開發板搭建RT-Thread開發環境
    王朝陽:杭州閃易科技嵌入式負責人,從事嵌入式Linux軟體、驅動開發、STM單片機開發、ESP32等開發。
  • PyCharm使用之利用Docker鏡像搭建Python開發環境
    在我們平時使用PyCharm的過程中,一般都是連接本地的Python環境進行開發,但是如果是離線的環境呢?
  • rockchip的yocto編譯環境搭建
    ,需要進行搭建交叉編譯工具鏈環境、移植u-boot、kernel、根文件系統的幾個部分工作。到現在比較常見的buildroot就是一體化生成,包括今天要介紹yocto環境都是如此,雖然buildroot小巧,但是有些功能沒有辦法完全滿足開發,例如ROS和QT一些的支持。韋東山老師在最新的pdf中介紹yocto是這樣的。Yocto 超級難用單是下載程序容量就達到 10G,使用一般的個人電腦需要編譯 20 小時以上。
  • Docker 開發鏡像搭建與DockerFile分享
    背景    之前搭建過一個開發鏡像,包含了 java、go 語言等基本的開發環境,結合 vscode remote 模式,可在本地直接進行開發,免去了安裝各種基礎環境和配置環境變量的麻煩但是對於使用者來說,依然有兩個並不方便的地方:易用性
  • 使用Docker高效搭建開發環境
    Docker作為輕量級的基於容器的解決方案,它對系統侵入性低,容易移植,天生就適合做複雜業務部署和開發環境搭建
  • 使用樹莓派做ROS開發_(4)搭建Arduino開發環境
    本次教程演示如何在樹莓派系統中搭建arduino的開發環境,完成本次教程需要準備arduino開發版一個,任何型號都行,我這裡使用的是UNO,下面是具體的搭建開發環境的步驟
  • 本次發布 Linux Lab v0.7 正式版,開發並製作 Linux Lab Disk,支持透明增容、零損編譯和即插即用
    Linux Lab 是一套用於 Linux 內核學習、開發和測試的即時實驗室,可以極速搭建和使用,功能強大,用法簡單!Linux Lab Logo可以用它來高效地學習處理器架構、Linux 內核、嵌入式 Linux 系統、C 語言編程、Linux 彙編、Shell 編程等。
  • 用Docker和Git搭建在線開發環境
    如今,在傳統的開發模式下,版本控制,自動化測試,持續集成都已經陸陸續續放到的雲端。唯獨開發工程師還在利用手中的電腦,筆記本等設備來完成開發工作。在項目開發階段,我們通常面臨下面幾個問題:在項目啟動階段,如何讓開發工程師快速搭建,並配置開發環境,來縮短項目啟動時間和成本。
  • ffmpeg第一彈:ffmep介紹和開發環境搭建!
    它還具有高度的可移植性:FFmpeg可以在各種構建環境,機器體系結構和配置下,跨Linux,Mac OS X,Microsoft Windows,BSD,Solaris等編譯,運行並通過我們的測試基礎架構 FATE。
  • Windows 下 iCE40 FPGA 開源開發環境配置
    Windows 下 iCE40 FPGA 開發環境配置收到碎碎思寄來的基於 iCE40UP5k
  • C#開發移動應用之環境搭建
    (也許是微軟爸爸太好,每次都管吃管住,各種開發環境 所需資源全部準備好)讓我任性了一把..特秒的 VS2017集成的谷歌仿真器..真是卡出翔...我又放棄了..直到昨天..看到博文..才醒悟..這算個什麼事..當初2013時期都能折騰一個月的我  如今這麼好的條件...這點小事情就能難倒?..
  • Centos & VirtualBox 環境搭建
    因為最近工作需要在 linux 下倒騰,所以搭建一套 linux 開發環境是避免不了的而環境的搭建往往是最費力費神的,踩了一些坑,所以詳細記錄自己一下搭建 linux 開發環境的過程我這裡選擇的開發環境是本地安裝虛擬機鏡像選擇基本根據生產環境來自行決定
  • linux C/C++開發環境搭建指南
    一、安裝基本開發環境本人想學習一下Linux下的C,C++程序開發,這幾天一直在研究Linux下的C語言編譯環境的建立,因為新裝好的Ubuntu裡面缺少函數庫文件,所以無法編譯最簡單的C語言文件,故要先配置一番,這幾天也有一點心得,寫下來和大家一起學習。
  • 樹莓派4 嵌入式Linux開發過程詳解
    樹莓派4 嵌入式Linux開發過程詳解1.概述2.開發環境概述3.交叉編譯工具的安裝與uboot的編譯3.1 安裝arm 64位交叉編譯環境3.2 編譯樹莓派上的uboot3.3 將u-boot放到樹莓派上運行4.樹莓派4b上的Linux
  • 騰訊雲伺服器搭建鴻蒙Hi3861開發板開發環境
    安裝Hi3861開發板的開發環境可以選擇虛擬機、Docker、 WSL 或者實體Linux系統電腦,這幾種方式都只合適單一的開發環境,像我這樣的上班族,家裡單位各一個電腦,用起來還是不太方便。如果這個開發環境部署在雲端,那豈不是我在哪都可以隨時繼續之前的工作了?