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