閱讀912 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Hi3531 SDK v2.0.8.0 安裝

1、Hi3531 SDK包位置


    在"Hi3531_V100R001***/01.software/board"目錄下,您可以看到一個 Hi3531_SDK_Vx.x.x.x.tgz 的文件,


該文件就是Hi3531的軟件開發包。


2、解壓縮SDK包


    在linux服務器上(或者一台裝有linux的PC上,主流的linux發行版本均可以),使用命令:tar -zxf Hi3531_SDK_Vx.x.x.x.tgz ,


解壓縮該文件,可以得到一個Hi3531_SDK_Vx.x.x.x目錄。


3、展開SDK包內容


    返回Hi3531_SDK_Vx.x.x.x目錄,運行./sdk.unpack(請用root或sudo權限執行)將會展開SDK包打包壓縮存放的內容,請按照提示完成操作。


如果您需要通過WINDOWS操作係統中轉拷貝SDK包,請先運行./sdk.cleanup,收起SDK包的內容,拷貝到新的目錄後再展開。


4、在linux服務器上安裝交叉編譯器


    1)安裝uclibc交叉編譯器(注意,需要有sudo權限或者root權限):


       進入Hi3531_SDK_Vx.x.x.x/osdrv/toolchain/arm-hisiv100-linux目錄,運行chmod +x cross.install,然後運行./cross.install即可。

      進入Hi3531_SDK_Vx.x.x.x/osdrv/toolchain/arm-hisiv100nptl-linux目錄,運行chmod +x cross.install,然後運行./cross.install即可。(原文檔沒有)


    2) 安裝glibc交叉編譯器(注意,需要有sudo權限或者root權限):


       進入Hi3531_SDK_Vx.x.x.x/osdrv/toolchain/arm-hisiv200-linux目錄,運行chmod +x cross.install,然後運行./cross.install即可。

  

    3) 執行source /etc/profile, 安裝交叉編譯器的腳本配置的環境變量就可以生效了,或者請重新登陸也可。


5、編譯osdrv


    參見osdrv目錄下readme


———————以上為廠家提供教程———————


幾點說明:

1、uclibc是麵向嵌入式Linux係統的小型的C標準庫,glibc是Linux的標準運行庫。

使用某一工具鏈編譯後,如果需要更換工具鏈,請先將原工具鏈編譯文件清除,然後再更換工具鏈編譯。

開始我發現使用arm-hisiv100-linux編譯內核時,會提示找不到該命令,換到arm-hisiv200-linux可以。估計就是上述問題吧。

2、source命令即執行命令,和“./”是一樣的。(個人理解)

3、Linux下也有環境變量,如下:

    常見的配置文件包括:

      (1-1)/etc/profile:對所有用戶生效;此文件為係統的每個用戶設置環境信息,當用戶第一次登錄時,該文件被執行;並從/etc/profile.d目錄的配置文件中搜集shell的設置。例如:編輯/etc/profile文件,添加CLASSPATH變量   

          # vi /etc/profile

          添加一行:export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib

          修改後需要執行重新登錄才能生效,也可以執行命令source /etc/profile來生效

     (1-2)/etc/bashrc:對所有用戶生效;為每一個運行bash shell的用戶執行此文件.當bash shell被打開時,該文件被讀取編輯方法如上,不再贅述


     環境變量的查看

        (1)使用echo命令查看單個環境變量。例如:echo $PATH

        (2)使用env查看所有環境變量。例如:env

        (3)使用set查看所有本地定義的環境變量。例如:set

          另外,unset可以刪除指定的環境變量。

          常用的環境變量



          PATH 決定了shell將到哪些目錄中尋找命令或程序

          HOME 當前用戶主目錄

          HISTSIZE 曆史記錄數

          LOGNAME 當前用戶的登錄名

          HOSTNAME 指主機的名稱

          SHELL 當前用戶Shell類型

          LANGUGE  語言相關的環境變量,多語言可以修改此環境變量

          MAIL 當前用戶的郵件存放目錄

          PS1 基本提示符,對於root用戶是#,對於普通用戶是$




好,繼續。


這裏的重點肯定在第五步。下麵詳細說說。


osdrv目錄結構說明:


osdrv


├─Makefile ------------------------------ osdrv目錄編譯腳本


├─busybox ------------------------------- 存放busybox源代碼的目錄


├─tools --------------------------------- 存放各種工具的目錄


│  ├─board_tools ----------------------- 各種單板上使用工具


│  │  ├─reg-tools-1.0.0 --------------- 寄存器讀寫工具


│  │  ├─mtd-utils --------------------- flash裸讀寫工具


│  │  ├─udev-100 ---------------------- udev工具集


│  │  ├─gdb --------------------------- gdb工具


│  │  ├─parted ------------------------ 大容量硬盤分區工具


│  │  └─e2fsprogs --------------------- mkfs工具集


│  └─pc_tools -------------------------- 各種pc上使用工具


│      ├─mkfs.cramfs ------------------- cramfs文件係統製作工具


│      ├─mkfs.jffs2 -------------------- jffs2文件係統製作工具


│      ├─mkimage ----------------------- uImage製作工具


│      ├─mkyaffs2image301 -------------- yaffs2文件係統製作工具


│      ├─nand_production --------------- nand flash燒寫文件製作工具


│      └─uboot_tools ------------------- uboot鏡像製作工具、xls文件及ddr初始化腳本、bootrom工具


├─toolchain ----------------------------- 存放工具鏈的目錄


│  ├─arm-hisiv100nptl-linux ---------------- hisiv100nptl交叉工具鏈


│  └─arm-hisiv200-linux ---------------- hisiv200交叉工具鏈


├─pub ----------------------------------- 存放各種鏡像的目錄


│  ├─image_glibc ----------------------- 基於hisiv100nptl工具鏈編譯,可供FLASH燒寫的映像文件,包括uboot、內核、文件係統


│  ├─image_uclibc ---------------------- 基於hisiv200工具鏈編譯,可供FLASH燒寫的映像文件,包括uboot、內核、文件係統


│  ├─bin ------------------------------- 各種未放入根文件係統的工具


│  │  ├─pc ---------------------------- 在pc上執行的工具


│  │  ├─board_glibc ------------------- 基於hisiv100nptl工具鏈編譯,在單板上執行的工具


│  │  └─board_uclibc ------------------ 基於hisiv200工具鏈編譯,在單板上執行的工具


│  ├─rootfs_uclibc.tgz ----------------- 基於hisiv100nptl工具鏈編譯的根文件係統


│  └─rootfs_glibc.tgz ------------------ 基於hisiv200工具鏈編譯的根文件係統


├─drv ----------------------------------- 存放外設驅動的目錄


│  └─pcie_mcc -------------------------- pcie消息通訊層驅動


├─rootfs_scripts ------------------------ 存放根文件係統製作腳本的目錄


├─uboot --------------------------------- 存放uboot源代碼的目錄


└─kernel -------------------------------- 存放kernel源代碼的目錄


第一步,開始編譯內核。


cp arch/arm/configs/godnet_defconfig .config


make ARCH=arm CROSS_COMPILE=arm-hisiv200-linux- menuconfig


make ARCH=arm CROSS_COMPILE=arm-hisiv200-linux- uImage


即執行了make menuconfig 和 make uImage。

執行make menuconfig 後會顯示一個菜單,大概是對Linux內核的配置,不過對於剛接觸Linux的我來說,先略過,直接Quit。

執行make uImage會編譯出Linux內核,先說一下 幾種linux內核文件的區別 (網上一把,隨便抓一個過來)


vmlinux  編譯出來的最原始的內核文件,未壓縮。
zImage   是vmlinux經過gzip壓縮後的文件。
bzImage bz表示“big zImage”,不是用bzip2壓縮的。兩者的不同之處在於,zImage解壓縮內核到低端內存(第一個640K),bzImage解壓縮內核到高端內存(1M以上)。如果內核比較小,那麼采用zImage或bzImage都行,如果比較大應該用bzImage。
uImage   U-boot專用的映像文件,它是在zImage之前加上一個長度為0x40的tag。
vmlinuz  是bzImage/zImage文件的拷貝或指向bzImage/zImage的鏈接。
initrd   是“initial ramdisk”的簡寫。一般被用來臨時的引導硬件到實際內核vmlinuz能夠接管並繼續引導的狀態。

多說一句的話,就是:
zImage是ARM Linux常用的一種壓縮映像文件,uImage是U-boot專用的映像文件,它是在zImage之前加上一個長度為0x40的“頭”,說明這個映像文件的類型、加載位置、生成時間、大小等信息。換句話說,如果直接從uImage的0x40位置開始執行,zImage和uImage沒有任何區別。另外,Linux2.4內核不支持uImage,Linux2.6內核加入了很多對嵌入式係統的支持,但是uImage的生成也需要設置。


所以呢,由於我使用uboot來load,編譯出的內核肯定會有uImage這個格式。


但是,我在這裏碰到了一個問題:


make ARCH=arm CROSS_COMPILE=arm-hisiv200-linux- uImage

  CHK     include/linux/version.h

  CHK     include/generated/utsrelease.h

make[1]: `include/generated/mach-types.h' is up to date.

  CALL    scripts/checksyscalls.sh

  CHK     include/generated/compile.h

  Kernel: arch/arm/boot/Image is ready

  SHIPPED arch/arm/boot/compressed/lib1funcs.S

  AS      arch/arm/boot/compressed/lib1funcs.o

  LD      arch/arm/boot/compressed/vmlinux

  OBJCOPY arch/arm/boot/zImage

  Kernel: arch/arm/boot/zImage is ready

  UIMAGE  arch/arm/boot/uImage

"mkimage" command not found - U-Boot images will not be built

make[1]: *** [arch/arm/boot/uImage] Error 1

make: *** [uImage] Error 2


係統提示"mkimage" command not found - U-Boot images will not be built。

也就是說,mkimage該工具沒起作用。mkimage是在編譯完uboot之後生成的,我查看了一下,我這裏確實有,所以按照原理來說,把它放到該呆的地方去就成啦。

按照上述對環境變量的解釋,修改/etc/bashrc,在裏麵加入了mkimage的路徑,我編!結果不成。

把mkimage放/bin下,我再編!OK。

 

再想想,我看了一下環境變量:

[root@localhost linux-3.0.y]# echo $PATH

/usr/bin:/opt/hisi-linux/x86-arm/arm-hisiv200-linux/target/bin:/opt/hisi-linux/x86-arm/arm-hisiv100-linux/target/bin:/usr/lib/qt-3.3/bin:/usr/lib/ccache:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/wanghx/bin

這裏插一句,Linux下環境變量是靠:來分割的。

把mkimage扔到/opt/hisi-linux/x86-arm/arm-hisiv200-linux/target/bin下試試,嗯,終於成了。

  CHK     include/linux/version.h

  CHK     include/generated/utsrelease.h

make[1]: `include/generated/mach-types.h' is up to date.

  CALL    scripts/checksyscalls.sh

  CHK     include/generated/compile.h

  Kernel: arch/arm/boot/Image is ready

  SHIPPED arch/arm/boot/compressed/lib1funcs.S

  AS      arch/arm/boot/compressed/lib1funcs.o

  LD      arch/arm/boot/compressed/vmlinux

  OBJCOPY arch/arm/boot/zImage

  Kernel: arch/arm/boot/zImage is ready

  UIMAGE  arch/arm/boot/uImage

Image Name:   Linux-3.0.8

Created:      Thu Apr 25 15:42:10 2013

Image Type:   ARM Linux Kernel Image (uncompressed)

Data Size:    3496948 Bytes = 3414.99 kB = 3.33 MB

Load Address: 80008000

Entry Point:  80008000

  Image arch/arm/boot/uImage is ready

看看有木有:

[root@localhost linux-3.0.y]# cd arch/arm/boot

[root@localhost boot]# ls

bootp  compressed  Image  install.sh  Makefile  uImage  zImage


OK。終於編出來了。


先到這裏

最後更新:2017-04-03 16:49:01

  上一篇:go Cramfs、JFFS2、YAFFS2全麵對比
  下一篇:go Android 自動滾動的GridView