联想栗子板_一键编译下载程序包

一键编译 一键下载
robe_zhang
发布时间: 2019-01-20
阅读: 1550

最近试用了一块联想的linux开发板,没错联想的开发板,名字叫 栗子板,采用 TI AM5708 的芯片,cortex a15 1Ghz 单核心,但是内有 DSP  和两个 cortex M4 核心,芯片是定位于工业控制的,多种内核异构芯片,板载 1G 内存,8G emmc 存储,千兆网口 ,usb 3.0  2.0 ,HDMI 接口,加上 TI 的 SDK 也是强大的无与伦比,显得很高大上,好不好用这个因人而异,不做评价。

TI 的 SDK 确实是很厉害的,大而全,能展示出芯片特有的功能,比如这个芯片的 arm 特性,DSP 算法,图像处理等,有一些3D  Qt   图像处理   视频编解码的应用,总体感觉是高大上:

IMG_0310.JPG

具体使用的时候,感觉不是特别好,

1,sdk bug 还比较多,很明显的 bug, 哈哈

2,可能还不熟悉吧,感觉不太好用,这个是主观原因

3,arago 项目代码,下载是个大问题。

1 和 3 都不是我能改变的,我只是在试用初期资料不太多的情况下,参考以往试用过的板子,做了一个一键编译下载的程序包,分享一下:

功能还很简单,后续再慢慢完善,现在已经能用了,一键编译下载程序包的好处也是很明显的,效率高,还可以避免一些人为手工失误带来的错误。

一键编译下载的用户界面:

5.png

前 7 项都是可以用的,后面的也能用,只是需要额外的文件太多了,还需要继续完善,后续发到 github 上

使用起来很方便,全部菜单提示方式,比如编译 uboot ,输入 ./leezboard  回车,选择 1, 开始编译了:

1.png

编译完成绿色提示成功,也有可能失败,失败是红色字体提示:

2.png

编译 kernel 也是一样的:

3.png

4.png

安装直接把本文中的源码复制下来,贴到 SDK 根目录中的四个文件中:然后修改 4 个变量即可运行:源码中有注释,写的比较清楚

7.png

8.png


介绍完了,上源码:

leezboard_sdk  文件:


#!/bin/bash

# ==============================以下全部不用动   robe 2019.1.20
# env 
UBOOT=board-support/u-boot-2017.01+gitAUTOINC+c68ed086bd-gc68ed086bd
LINUX=board-support/linux-4.9.69+gitAUTOINC+9ce43c71ae-g9ce43c71ae
PWD=`pwd`
# PWD=$(pwd)
UBOOTDIR=${PWD}/${UBOOT}
LINUXDIR=${PWD}/${LINUX}

UBOOT_defconfig=LenovoPi_defconfig
#LINUX_defconfig=tisdk_am57xx-evm_defconfig
LINUX_defconfig=LenovoPi_defconfig
# LINUX_defconfig=LenovoPi_robe_defconfig


# uboot output file.
MLOfile=${UBOOTDIR}/MLO
UBOOTfile=${UBOOTDIR}/u-boot.img

# linux output file.
KERNELfile=${LINUXDIR}/arch/arm/boot/zImage
DTBfile=${LINUXDIR}/arch/arm/boot/dts/LenovoPi.dtb
DTB_file=LenovoPi.dtb
LEEZBOARD_MODULES_FOLDER=${PWD}/leezboard_modules
LEEZBOARD_MODULES_TAR=${LEEZBOARD_MODULES_FOLDER}.tar

# env
ARCH=arm
# CROSS_COMPILE=arm-linux-gnueabihf-
# export PATH=${PATH}:${PWD}/linux-devkit/sysroots/x86_64-arago-linux/usr/bin
CROSS_COMPILE=${PWD}/linux-devkit/sysroots/x86_64-arago-linux/usr/bin/arm-linux-gnueabihf-
export ARCH CROSS_COMPILE

# CROSS_COMPILE=/home/robe/ti-processor-sdk-linux-am57xx-evm-04.03.00.05/linux-devkit/sysroots/x86_64-arago-linux/usr/bin/arm-linux-gnueabihf- make LenovoPi_defconfig
# CROSS_COMPILE=/home/robe/ti-processor-sdk-linux-am57xx-evm-04.03.00.05/linux-devkit/sysroots/x86_64-arago-linux/usr/bin/arm-linux-gnueabihf- make menuconfig

# ROOTFS
build_rootfs_with_MODULES=yes

# ==============================以上全部不用动   robe 2019.1.20

# ==============================以下需要根据自己情况修改   robe 2019.1.20
# imagepath 是从网盘下载的固件,解压后的目录
imagepath=/datadisk/leezboard/leezboard_TI5708/firmware/LenovoPi_programming_4.3

# 这三个变量,可以把sd卡烧录一次后,插到电脑上,能看到自动挂载的目录默认应该是 /media/{name}/boot  和  rootfs	
sdcard_boot=/media/robe/boot
sdcard_root=/media/robe/rootfs
sdcard_root_boot=/media/robe/rootfs/boot

# 这个是 sd 卡设备文件,这里要不要都可以,leezboard_sdcard 文件中也有这个变量,会把这个覆盖掉
sdcard=/dev/sdc

# ==============================以下需要根据自己情况修改   robe 2019.1.20
linux_image_path=/datadisk/leezboard

debian9_tar=${linux_image_path}/debian_stretch.tar
ubuntu18_tar=${linux_image_path}/ubuntu_18.04_LTS.tar
ubuntu16_tar=${linux_image_path}/ubuntu16.04_lts_qinghua.tar

debian9_folder=${linux_image_path}/debian_stretch
ubuntu18_folder=${linux_image_path}/ubuntu_18.04_LTS
ubuntu16_folder=${linux_image_path}/ubuntu16.04_lts



leezboard_sdcard  文件:


#!/bin/bash
sdcard=/dev/sdb


leezboard_mod  文件:


#!/bin/bash

# robe
function echo_s()
{
	echo -ne "\e[32m"
	echo -n $*
	echo -e "\e[0m"
}

function echo_f()
{
	echo -ne "\e[31m"
	echo -n $*
	echo -e "\e[0m"
}

function echo_i()
{
	echo -ne "\e[0m"
	echo -n $*
	echo -e "\e[0m"
}

function check_sdk()
{
	echo_f please check:
	echo_f 1.TI SDK is installed.
	echo_f 2.uboot DIR is not moved.
	echo_f 3.PATCH LenovoPi_patch_4.3.
	echo_f and then try to rebuild again.
}


# make uboot
function make_uboot()
{
if [ -d ${UBOOTDIR} ]; then
	pushd ${UBOOTDIR}
	make ${UBOOT_defconfig}
	make
	if ! [[ $? -eq 0 ]]; then
		echo_f build UBOOT fail.
		exit 1
	fi
	popd
	echo_s build UBOOT successful.
else
	echo_f  ${UBOOTDIR} is not exist.
	check_sdk
	exit 11
fi
}

# make linux menuconfig
function make_linux_menuconfig()
{
if [ -d ${LINUXDIR} ]; then
	pushd ${LINUXDIR}
	make ${LINUX_defconfig}
	make menuconfig
	sudo cp .config arch/arm/configs/${LINUX_defconfig}
	popd
	echo_s save .config to arch/arm/configs/${LINUX_defconfig}
else
	echo_f  ${LINUXDIR} is not exist.
	check_sdk
	exit 12
fi	
}

# make linux
function make_linux()
{
if [ -d ${LINUXDIR} ]; then
	pushd ${LINUXDIR}
	make ${LINUX_defconfig}
	make zImage -j2
	if ! [[ $? -eq 0 ]]; then
		echo_f build LINUX fail.
		exit 2
	fi
	# make LenovoPi.dtb
	# make modules
	popd
	echo_s build LINUX successful.
else
	echo_f  ${LINUXDIR} is not exist.
	check_sdk
	exit 12
fi
}

# make DTB
function make_dtb()
{
if [ -d ${LINUXDIR} ]; then
	pushd ${LINUXDIR}
	make ${LINUX_defconfig}
	make ${DTB_file}
	if ! [[ $? -eq 0 ]]; then
		echo_f build DTB fail.
		exit 3
	fi
	popd
	echo_s build DTB successful.
else
	echo_f  ${LINUXDIR} is not exist.
	check_sdk
	exit 12
fi
}

# make modules
function make_modules()
{
if [ -d ${LINUXDIR} ]; then
	pushd ${LINUXDIR}
	make ${LINUX_defconfig}
	make modules
	if ! [[ $? -eq 0 ]]; then
		echo_f build DRIVER fail.
		exit 4
	fi
	echo_s build DRIVER successful.
	sudo rm -rf ${LEEZBOARD_MODULES_FOLDER}
	sudo rm -rf ${LEEZBOARD_MODULES_TAR}
	mkdir ${LEEZBOARD_MODULES_FOLDER}
	if  ! [ -d ${LEEZBOARD_MODULES_FOLDER} ]; then
		exit 4
	fi
	make INSTALL_MOD_PATH=${LEEZBOARD_MODULES_FOLDER} modules_install
	popd
	pushd ${LEEZBOARD_MODULES_FOLDER}
	sudo tar -cvf ${LEEZBOARD_MODULES_TAR} *
	echo_s build DRIVER.tar successful.
	popd
else
	echo_f  ${LINUXDIR} is not exist.
	check_sdk
	exit 12
fi
}


# robe

# sudo make ARCH=arm INSTALL_MOD_PATH=/media/rootfs modules_install

# passwd -l robe
# passwd -u robe
# passwd -d robe
# tar tvf ti-sdk.tar

# make_uboot
# make_linux
# make_dtb
# make_modules
# ls -al ${MLOfile} ${UBOOTfile} ${KERNELfile} ${DTBfile}



# select sdcard
function select_sdcard()
{
	read -p "please input the sdcard device [/dev/sdb]:" sdcard
	while [ ! -b ${sdcard} ]
	do
		read -p "try again. please input the sdcard device [/dev/sdb]:" sdcard
	done
	echo "#!/bin/bash" > ${sdk_sdcard_file}
	echo "sdcard=${sdcard}" >> ${sdk_sdcard_file}
}

# make SD.CARD with LenovoPi_programming_4.3
function make_sdcard_ti_prebuild_image()
{
	pushd ${imagepath}
	sudo ./mkmmc-am57xx.sh ${sdcard}  MLO u-boot.img zImage LenovoPi.dtb tisdk-rootfs-image-am57xx-evm.tar.xz
	popd
}

# NOTE that installing ROOTFS successful
function echo_s_rm_sdcard_allfile()
{
	echo_s remove SD card boot partition file ok.
	echo_s remove SD card rootfs partition file ok.
}
function echo_s_install_MLO_uboot()
{
	echo_s install MLO ok.
	echo_s install u-boot.img ok.
}
function echo_s_install_ROOTFS()
{
	echo_s install ROOTFS ok.
}
function echo_s_install_DRIVERS()
{
	echo_s install drivers ok.
}
function echo_s_install_zImage_DTB()
{
	echo_s install zImage ok.
	echo_s install LenovoPi.dtb ok.
}

# make_sdcard with DEBIAN_9 TAR
function make_sdcard_debian_tar()
{	
	sudo rm -rf ${sdcard_boot}/*
	sudo rm -rf ${sdcard_root}/*
	echo_s_rm_sdcard_allfile
	
	sudo cp ${MLOfile} ${sdcard_boot}/
	sudo cp ${UBOOTfile} ${sdcard_boot}/
	echo_s_install_MLO_uboot
	
	sudo tar -xvf ${debian9_tar} -C ${sdcard_root}/
	echo_s_install_ROOTFS
	
	if [[ ${build_rootfs_with_MODULES} -eq yes ]]; then
		sudo tar -xvf ${LEEZBOARD_MODULES_TAR} -C ${sdcard_root}
		echo_s_install_DRIVERS
	fi 
	sync
	
	sudo cp ${KERNELfile} ${sdcard_root_boot}/
	sudo cp ${DTBfile} ${sdcard_root_boot}/
	echo_s_install_zImage_DTB
	
	sync
}

# make_sdcard with ubuntu_18.04_lts TAR
function make_sdcard_ubuntu18_tar()
{
	sudo rm -rf ${sdcard_boot}/*
	sudo rm -rf ${sdcard_root}/*
	echo_s_rm_sdcard_allfile
	
	sudo cp ${MLOfile} ${sdcard_boot}/
	sudo cp ${UBOOTfile} ${sdcard_boot}/
	echo_s_install_MLO_uboot

	sudo tar -xvf ${ubuntu18_tar} -C ${sdcard_root}/
	echo_s_install_ROOTFS
	
	if [[ ${build_rootfs_with_MODULES} -eq yes ]]; then
		sudo tar -xvf ${LEEZBOARD_MODULES_TAR} -C ${sdcard_root}
		echo_s_install_DRIVERS
	fi
	sync
	
	sudo cp ${KERNELfile} ${sdcard_root_boot}/
	sudo cp ${DTBfile} ${sdcard_root_boot}/
	echo_s_install_zImage_DTB
	
	sync
}

# make_sdcard with ubuntu_16.04_lts TAR
function make_sdcard_ubuntu16_tar()
{
	sudo rm -rf ${sdcard_boot}/*
	sudo rm -rf ${sdcard_root}/*
	echo_s_rm_sdcard_allfile
	
	sudo cp ${MLOfile} ${sdcard_boot}/
	sudo cp ${UBOOTfile} ${sdcard_boot}/
	echo_s_install_MLO_uboot

	sudo tar -xvf ${ubuntu16_tar} -C ${sdcard_root}/
	echo_s_install_ROOTFS
	
	if [[ ${build_rootfs_with_MODULES} -eq yes ]]; then
		sudo tar -xvf ${LEEZBOARD_MODULES_TAR} -C ${sdcard_root}
		echo_s_install_DRIVERS
	fi
	sync
	
	sudo cp ${KERNELfile} ${sdcard_root_boot}/
	sudo cp ${DTBfile} ${sdcard_root_boot}/
	echo_s_install_zImage_DTB
	
	sync
}

# rootfs.TAR will be done something 
# apt install qemu-user-static
function not_use()
{
	sudo cp -rf /usr/bin/qemu-arm-static ${ubuntu18_folder}/usr/bin/
	sudo chroot ${ubuntu18_folder} /usr/bin/qemu-arm-static /bin/sh -i
	passwd -d root
	echo leezboard > /etc/hostname
#	sudo tar -xvf ${LEEZBOARD_MODULES_TAR} -C ${ubuntu18_folder}
		
	sudo rm -rf ${ubuntu18_folder}/usr/bin/qemu-arm-static
}

# make_sdcard with DEBIAN_9 folder
function make_sdcard_debian_folder()
{	
	sudo rm -rf ${sdcard_boot}/*
	sudo rm -rf ${sdcard_root}/*
	echo_s_rm_sdcard_allfile
	
	sudo cp ${MLOfile} ${sdcard_boot}/
	sudo cp ${UBOOTfile} ${sdcard_boot}/
	echo_s_install_MLO_uboot

	sudo cp -rf ${debian9_folder}/* ${sdcard_root}/
	echo_s_install_ROOTFS
	
	if [[ ${build_rootfs_with_MODULES} -eq yes ]]; then
		sudo tar -xvf ${LEEZBOARD_MODULES_TAR} -C ${sdcard_root}
		echo_s_install_DRIVERS
	fi
	sync
	
	sudo cp ${KERNELfile} ${sdcard_root_boot}/
	sudo cp ${DTBfile} ${sdcard_root_boot}/
	echo_s_install_zImage_DTB
	
	sync
}

# make_sdcard with ubuntu_18.04_lts folder
function make_sdcard_ubuntu18_folder()
{
	sudo rm -rf ${sdcard_boot}/*
	sudo rm -rf ${sdcard_root}/*
	echo_s_rm_sdcard_allfile
	
	sudo cp ${MLOfile} ${sdcard_boot}/
	sudo cp ${UBOOTfile} ${sdcard_boot}/
	echo_s_install_MLO_uboot

	sudo cp -rf ${ubuntu18_folder}/* ${sdcard_root}/
	echo_s_install_ROOTFS
	
	if [[ ${build_rootfs_with_MODULES} -eq yes ]]; then
		sudo tar -xvf ${LEEZBOARD_MODULES_TAR} -C ${sdcard_root}
		echo_s_install_DRIVERS
	fi
	sync
	
	sudo cp ${KERNELfile} ${sdcard_root_boot}/
	sudo cp ${DTBfile} ${sdcard_root_boot}/
	echo_s_install_zImage_DTB
	
	sync
}

# make_sdcard with ubuntu_16.04_lts folder
function make_sdcard_ubuntu16_folder()
{
	sudo rm -rf ${sdcard_boot}/*
	sudo rm -rf ${sdcard_root}/*
	echo_s_rm_sdcard_allfile
	
	sudo cp ${MLOfile} ${sdcard_boot}/
	sudo cp ${UBOOTfile} ${sdcard_boot}/
	echo_s_install_MLO_uboot

	sudo cp -rf ${ubuntu16_folder}/* ${sdcard_root}/
	echo_s_install_ROOTFS
	
	if [[ ${build_rootfs_with_MODULES} -eq yes ]]; then
		sudo tar -xvf ${LEEZBOARD_MODULES_TAR} -C ${sdcard_root}
		echo_s_install_DRIVERS
	fi
	sync
	
	sudo cp ${KERNELfile} ${sdcard_root_boot}/
	sudo cp ${DTBfile} ${sdcard_root_boot}/
	echo_s_install_zImage_DTB
	
	sync
}

function menu()
{
	echo_i [1] make uboot
	echo_i [2] make linux menuconfig
	echo_i [3] make linux
	echo_i [4] make DTB
	echo_i [5] make modules
	echo_i [6] select SD card device
	echo_i [61] install TI_ROOTFS to SD card
	echo_i [7] install debian 9 to SD card \(tar\)
	echo_i [8] install ubuntu 18.04 to SD card \(tar\)
	echo_i [9] install ubuntu 16.04 to SD card \(tar\)	
	echo_i [0] install debian 9 to SD card \(folder\)
	echo_i [a] install ubuntu 18.04 to SD card \(folder\)
	echo_i [b] install ubuntu 16.04 to SD card \(folder\)
}

function do_something()
{
	menu
	read -p "please select: " ANSWER
	if [[ $ANSWER == "1" ]]; then make_uboot;fi
	if [[ $ANSWER == "2" ]]; then make_linux_menuconfig;fi
	if [[ $ANSWER == "3" ]]; then make_linux;fi
	if [[ $ANSWER == "4" ]]; then make_dtb;fi
	if [[ $ANSWER == "5" ]]; then make_modules;fi
	if [[ $ANSWER == "6" ]]; then select_sdcard ;fi
	if [[ $ANSWER == "61" ]]; then make_sdcard_ti_prebuild_image;fi
	if [[ $ANSWER == "7" ]]; then make_sdcard_debian_tar;fi
	if [[ $ANSWER == "8" ]]; then make_sdcard_ubuntu18_tar;fi
	if [[ $ANSWER == "9" ]]; then make_sdcard_ubuntu16_tar;fi
	if [[ $ANSWER == "0" ]]; then make_sdcard_debian_folder;fi
	if [[ $ANSWER == "a" ]]; then make_sdcard_ubuntu18_folder;fi
	if [[ $ANSWER == "b" ]]; then make_sdcard_ubuntu16_folder;fi
}


# make_uboot
# make_linux_menuconfig
# make_linux
# make_dtb
# make_modules
# make_sdcard_ti_prebuild
# make_sdcard_debian_tar
# make_sdcard_ubuntu18_tar
# make_sdcard_ubuntu16_tar
# make_sdcard_debian_folder
# make_sdcard_ubuntu18_folder
# make_sdcard_ubuntu16_folder


leezboard  文件:

#!/bin/bash

sdk_env_file=./leezboard_sdk
sdk_sdcard_file=./leezboard_sdcard
sdk_modules_file=./leezboard_mod
source ${sdk_env_file}
source ${sdk_sdcard_file}
source ${sdk_modules_file}

do_something


现在只用到这里,做到这里,后续会再更新,源码更新到 github 上,有兴趣的话可以关注 https://github.com/robe-zhang/LeezBoard_TI5728

一键程序包,现在目录还有点乱,6 后面应该是 7 的,结果中间加了一个 61,哈哈。这个一键程序包原本是没有计划的,自己随便用用算了,结果就越写越多,越写越乱,再后来一想,完全可以做的像 orange pi    t-firefly  板子那样的一键程序包也是不错的,就重新整理一下有了此文。


原创作品,未经权利人授权禁止转载。详情见转载须知 举报文章

点赞 (0)
robe_zhang
评论(0)

登录后可评论,请 登录注册

相关文章推荐
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回

我要举报该内容理由

×
请输入您举报的理由(50字以内)