#!/bin/sh # # ti processor sdk linux am335x evm /bin/setup-targetfs-nfs.sh hacking # 说明: # 本文主要对TI的sdk中的setup-targetfs-nfs.sh脚本进行解读,是为了了解 # 其工作机制。 # # 2016-4-16 深圳 南山平山村 曾剑锋 # This distribution contains contributions or derivatives under copyright # as follows: # # Copyright (c) 2010, Texas Instruments Incorporated # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # - Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # - Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # - Neither the name of Texas Instruments nor the names of its # contributors may be used to endorse or promote products derived # from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE # OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. cwd=`dirname $0` . $cwd/common.sh # # #platform # PLATFORM=am335x-evm # #defconfig # DEFCONFIG=singlecore-omap2plus_defconfig # #Architecture # ARCH=armv7-a # #u-boot machine # UBOOT_MACHINE=am335x_evm_config # #Points to the root of the TI SDK # export TI_SDK_PATH=/home/Qt/ti-processor-sdk-linux-am335x-evm-01.00.00.00 # #root of the target file system for installing applications # DESTDIR=/home/Qt/ti-processor-sdk-linux-am335x-evm-01.00.00.00/targetNFS # #Points to the root of the Linux libraries and headers matching the # #demo file system. # export LINUX_DEVKIT_PATH=$(TI_SDK_PATH)/linux-devkit # #Cross compiler prefix # export CROSS_COMPILE=$(LINUX_DEVKIT_PATH)/sysroots/i686-arago-linux/usr/bin/arm-linux-gnueabihf- # #Default CC value to be used when cross compiling. This is so that the # #GNU Make default of "cc" is not used to point to the host compiler # export CC=$(CROSS_COMPILE)gcc # #Location of environment-setup file # export ENV_SETUP=$(LINUX_DEVKIT_PATH)/environment-setup # #The directory that points to the SDK kernel source tree # LINUXKERNEL_INSTALL_DIR=$(TI_SDK_PATH)/board-support/linux-3.14.26-g2489c02 # CFLAGS= -march=armv7-a -marm -mthumb-interwork -mfloat-abi=hard -mfpu=neon -mtune=cortex-a8 # SDK_PATH_TARGET=$(TI_SDK_PATH)/linux-devkit/sysroots/cortexa8t2hf-vfp-neon-linux-gnueabi/ # MAKE_JOBS=4 # TI_SDK_PATH=/home/Qt/ti-processor-sdk-linux-am335x-evm-01.00.00.00 SDKinstall=`grep TI_SDK_PATH= $cwd/../Rules.make | cut -d= -f2` # dstdefault=/home/Qt/ti-processor-sdk-linux-am335x-evm-01.00.00.00/targetNFS dstdefault=$SDKinstall/targetNFS echo "--------------------------------------------------------------------------------" # 配置NFS目录 echo "In which directory do you want to install the target filesystem?(if this directory does not exist it will be created)" read -p "[ $dstdefault ] " dst if [ ! -n "$dst" ]; then dst=$dstdefault fi echo "--------------------------------------------------------------------------------" echo echo "--------------------------------------------------------------------------------" echo "This step will extract the target filesystem to $dst" echo # 需要root权限 echo "Note! This command requires you to have administrator priviliges (sudo access) " echo "on your host." read -p "Press return to continue" REPLY extract_fs() { # 文件系统的tar包位置 fstar=`ls -1 $cwd/../filesystem/??sdk*rootfs*.tar.gz` me=`whoami` # 获取用户名 sudo mkdir -p $1 # 创建指定目录 check_status sudo tar xzf $fstar -C $1 # 将文件系统解压到指定的目录 check_status sudo chown $me:$me $1 # 改变指定目录的用户和群组 check_status sudo chown -R $me:$me $1/home $1/usr $1/etc $1/lib $1/boot # 改变指定目录下的属性 check_status # Opt isn't a standard Linux directory. First make sure it exist. if [ -d $1/opt ]; then sudo chown -R $me:$me $1/opt check_status fi echo # 显示提取文件成功 echo "Successfully extracted `basename $fstar` to $1" } # 检查目录是否存在,根据是否存在做对应的事:备份、拷贝等。 if [ -d $dst ]; then echo "$dst already exists" echo "(r) rename existing filesystem (o) overwrite existing filesystem (s) skip filesystem extraction" read -p "[r] " exists case "$exists" in s) echo "Skipping filesystem extraction" echo "WARNING! Keeping the previous filesystem may cause compatibility problems if you are upgrading the SDK" ;; o) sudo rm -rf $dst echo "Old $dst removed" extract_fs $dst ;; *) dte="`date +%m%d%Y`_`date +%H`.`date +%M`" echo "Path for old filesystem:" read -p "[ $dst.$dte ]" old if [ ! -n "$old" ]; then old="$dst.$dte" fi sudo mv $dst $old check_status echo echo "Successfully moved old $dst to $old" extract_fs $dst ;; esac else extract_fs $dst fi # 1. 查看 # Qt@aplex:~/ti-processor-sdk-linux-am335x-evm-01.00.00.00$ ls -al # total 294792 # -rwxr-xr-x 1 Qt Qt 1260 Aug 14 2015 Rules.make # -rwxr-xr-x 1 Qt Qt 4188 Apr 11 2015 setup.sh # -rw-rw-r-- 1 Qt Qt 77 Aug 14 2015 .gdbinit # -rw-rw-r-- 1 Qt Qt 65 Aug 14 2015 .targetfs # drwxr-xr-x 19 root root 4096 Aug 14 2015 targetNFS # Qt@aplex:~/ti-processor-sdk-linux-am335x-evm-01.00.00.00$ cat .targetfs # /home/Qt/ti-processor-sdk-linux-am335x-evm-01.00.00.00/targetNFS # Qt@aplex:~/ti-processor-sdk-linux-am335x-evm-01.00.00.00$ # Qt@aplex:~/ti-processor-sdk-linux-am335x-evm-01.00.00.00$ cat .gdbinit # set sysroot /home/Qt/ti-processor-sdk-linux-am335x-evm-01.00.00.00/targetNFS # 2. 如上可知,.targetfs确实生成了。 echo $dst > $cwd/../.targetfs echo "set sysroot $dst" > $cwd/../.gdbinit echo "--------------------------------------------------------------------------------" # platform=am335x-evm platform=`grep PLATFORM= $cwd/../Rules.make | cut -d= -f2` echo echo "--------------------------------------------------------------------------------" echo "This step will set up the SDK to install binaries in to:" echo " $dst/home/root/$platform" echo echo "The files will be available from /home/root/$platform on the target." echo echo "This setting can be changed later by editing Rules.make and changing the" echo "EXEC_DIR or DESTDIR variable (depending on your SDK)." echo read -p "Press return to continue" REPLY sed -i "s=EXEC_DIR\=.*$=EXEC_DIR\=$dst/home/root/$platform=g" $cwd/../Rules.make check_status # DESTDIR=/home/Qt/ti-processor-sdk-linux-am335x-evm-01.00.00.00/targetNFS sed -i "s=DESTDIR\=.*$=DESTDIR\=$dst=g" $cwd/../Rules.make check_status echo "Rules.make edited successfully.." echo "--------------------------------------------------------------------------------" echo echo "--------------------------------------------------------------------------------" echo "This step will export your target filesystem for NFS access." echo echo "Note! This command requires you to have administrator priviliges (sudo access) " echo "on your host." read -p "Press return to continue" REPLY # 检查NFS的路径是否已经设置了,如果设置了,那么就调过,如果没有设置,那么重新设置。 grep $dst /etc/exports > /dev/null if [ "$?" -eq "0" ]; then echo "$dst already NFS exported, skipping.." else sudo chmod 666 /etc/exports check_status sudo echo "$dst *(rw,nohide,insecure,no_subtree_check,async,no_root_squash)" >> /etc/exports check_status sudo chmod 644 /etc/exports check_status fi echo sudo /etc/init.d/nfs-kernel-server stop # 关闭nfs服务器 check_status sleep 1 sudo /etc/init.d/nfs-kernel-server start # 打开nfs服务为,是配置有效 check_status echo "--------------------------------------------------------------------------------"