海思 Hi3521A SDK 的安裝及環境設定

本篇紀錄一下海思 Hi3521A SDK安裝相關問題。

安裝 Linux build server

PC 端使用免費的 VMware Workstation Player,安裝 ubuntu 14.04 64-bit server 版本。安裝完畢後,enable share folder功能讓 windows 和 Linux 可以分享檔案,或者設定並啟動 samba server,方便 windows 與 Linux 分享檔案。

Q:
vmware環境掛載 share folder 發生
mount: unknown filesystem type 'vmhgfs'

A:
sudo apt-get install git
git clone https://github.com/rasa/vmware-tools-patches.git
cd vmware-tools-patches
sudo ./patched-open-vm-tools.sh
然後打 df,就可以看到 vmhgfs 可以正常使用
vmhgfs-fuse    483399676 97966528 385433148  21% /mnt/hgfs

Q:
如何設定 samba server ?

A:
sudo apt-get install samba
sudo vim /etc/samba/smb.conf
sudo service smbd restart
sudo smbpasswd -a user_name

[my_user]
 path = /home/my_user/ws
 available = yes
 valid users = user_name
 read only = no
 browseable = yes
 public = no
 writable = yes

安裝 Hi3521A_SDK

解開 tgz 之後,
sudo su
. sdk.unpack  <=== "." 後面要空格

安裝 cross compiler
进入Hi3521A_SDK_Vx.x.x.x/osdrv/opensource/toolchain/arm-hisiv400-linux目录,
运行chmod +x cross.install,
然后运行./cross.install即可。<== 不用空格
source /etc/profile <== 設gcc環境變數

Q:
安裝compiler 之後,還是找不到 compiler ?

A:
因為 build SDK 會執行 su,root 沒有設gcc環境變數,編輯 /root/.bashrc
加上 export PATH="/opt/hisi-linux/x86-arm/arm-hisiv400-linux/target/bin:$PATH"

Q:
編譯過程中發生以下錯誤
pushd: not found

A:
进入/bin目录,查看sh的链接文件
sh命令链接到的是dash,而pushd命令需要在bash的环境中执行。
执行sudo dpkg-reconfigure dash 命令,将dash设置为No。
再次查看sh的链接:已经修改为bash了。

安裝 Linux Build Server上相關軟件

因為 cross compiler 是 32-bit,所以會缺很多 package
我安裝以下 package 即可正常編譯 SDK
sudo apt-get install lib32stdc++6
sudo apt install lib32z1-dev
sudo apt-get install libncurses-dev

編譯 osdrv

cd osdrv
make OSDRV_CROSS=arm-hisiv400-linux CHIP=hi3521a all
cd osdrv/pub
tar zxvf rootfs_glibc.tgz
cd ../..
osdrv/pub/bin/pc/mkyaffs2image100 osdrv/pub/rootfs_glibc osdrv/pub/rootfs_glibc_2k_4bit.yaffs2 1 2

一切順利的話,會在 osdrv/pub/image_glibc 底下看到 uboot, uImage, 及 rootfs 如下:
rootfs_hi3521a_128k.jffs2  rootfs_hi3521a_2k_4bit.yaffs2  u-boot-hi3521a.bin
rootfs_hi3521a_256k.jffs2  rootfs_hi3521a_64k.jffs2       uImage_hi3521a

單獨編譯 uboot

若要單獨編譯 uboot,如下:
cd opensource/uboot/u-boot-2010.06
make ARCH=arm CROSS_COMPILE=arm-hisiv400-linux- hi3521a_config
make ARCH=arm CROSS_COMPILE=arm-hisiv400-linux-
cp u-boot.bin ../../../tools/pc/uboot_tools/
cd ../../../tools/pc/uboot_tools/
./mkboot.sh reg_info_hi3521a_400M_1GB_32bit_1100M_250M.bin u-boot-hi3521a.bin
cp u-boot-hi3521a.bin ../../../pub/image_glibc/
這樣就會更新 osdrv/pub/image_glibc 底下的 uboot 檔案

燒錄 uboot, kernel and rootfs

文件上有說明使用 tftp 下載 image 的方式,這邊記錄使用 usb storage 下載的方法

先將 u-boot-hi3521a.bin, uImage_hi3521a, rootfs_hi3521a_2k_4bit.yaffs2 複製到 SD card 上
u-boot 可以用 HiTool 燒錄,這裡跳過 u-boot 燒錄 (可自行比對文件或參考底下方法)

以燒錄到NAND Flash為例:
hisilicon # usb start

燒錄kernel
hisilicon # mw.b 82000000 ff 400000
hisilicon # fatload usb 0:1 0x82000000 uImage_hi3521a
hisilicon # nand erase 100000 400000
hisilicon # nand write 82000000 100000 400000

燒錄rootfs
hisilicon # mw.b 82000000 ff 2000000
hisilicon # fatload usb 0:1 0x82000000 rootfs_hi3521a_2k_4bit.yaffs2
hisilicon # nand erase 500000 2000000
hisilicon # nand write.yaffs 82000000 500000 18ED600 <== 這個是rootfs實際的大小

設定啟動參數
hisilicon # setenv bootargs 'mem=64M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=yaffs2 mtdparts=hinand:1M(boot),4M(kernel),32M(rootfs),27M(test)'
hisilicon # setenv bootcmd 'nand read 0x82000000 0x100000 0x400000;bootm 0x82000000'
hisilicon # sa
Saving Environment to NAND...
Erasing Nand...
Erasing at 0xa0000 -- 100% complete.
Writing to Nand... done
hisilicon # reset
resetting ...

開發環境

若網路不通,只能先 copy 到 sd card 上,mount sd card 的方法如下:
mkdir /mnt/sd
mount -t vfat /dev/sda1 /mnt/sd



留言

這個網誌中的熱門文章

以樂透為例,用Python統計馬可夫矩陣

將 Jenkins Job 的歷史結果整理出視覺化的 Daily Report mail (一)

如何用 Jenkins API 取得 Job Build Result