zoukankan      html  css  js  c++  java
  • ti processor sdk linux am335x evm /bin/setup-targetfs-nfs.sh hacking

    #!/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 "--------------------------------------------------------------------------------"
  • 相关阅读:
    composer 自动加载 通过classmap自动架子啊
    composer 自动加载一 通过file加载
    call_user_func函数
    array_filter与array_map
    array_filter、array_walk、array_map的区别
    array_filter函数
    基于visual Studio2013解决算法导论之012计数排序
    基于visual Studio2013解决算法导论之011快排改良
    基于visual Studio2013解决算法导论之010快排中应用插入排序
    基于visual Studio2013解决算法导论之009快速排序随机版本
  • 原文地址:https://www.cnblogs.com/zengjfgit/p/5397907.html
Copyright © 2011-2022 走看看