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

    #!/bin/sh
    
    #
    #      ti processor sdk linux am335x evm /bin/setup-tftp.sh hacking
    # 说明:
    #     本文主要对TI的sdk中的setup-tftp.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.
    
    # 获取当前工作路径,并执行common.sh,是为了使用里面的函数
    cwd=`dirname $0`
    . $cwd/common.sh
    
    # tftp配置文件路径
    tftpcfg=/etc/xinetd.d/tftp
    # tftp根目录路径
    tftprootdefault=/tftpboot
    
    # 创建tftpcfg文件,并将设定好的配置放入里面;
    tftp() {
        echo "
    service tftp
    {
    protocol = udp
    port = 69
    socket_type = dgram
    wait = yes
    user = nobody
    server = /usr/sbin/in.tftpd
    server_args = $tftproot
    disable = no
    }
    " | sudo tee $tftpcfg > /dev/null
         check_status
         echo
         echo "$tftpcfg successfully created"
    }
    
    echo "--------------------------------------------------------------------------------"
    echo "Which directory do you want to be your tftp root directory?(if this directory does not exist it will be created for you)"
    # 采用默认的tftproot还是自定义路径,有这部分决定。
    read -p "[ $tftprootdefault ] " tftproot
    
    if [ ! -n "$tftproot" ]; then
        tftproot=$tftprootdefault
    fi
    #
    # 1. 查看结果:
    #     Qt@aplex:~/ti-processor-sdk-linux-am335x-evm-01.00.00.00$ ls -al
    #     total 294792
    #     ......
    #     -rw-rw-r--  1 Qt   Qt          10 Aug 14  2015 .tftproot
    #     Qt@aplex:~/ti-processor-sdk-linux-am335x-evm-01.00.00.00$ cat .tftproot 
    #     /tftpboot
    # 2. 由上面可知,确实生成了.tftproot文件,里面确实也是/tftpboot
    echo $tftproot > $cwd/../.tftproot
    echo "--------------------------------------------------------------------------------"
    
    echo
    echo "--------------------------------------------------------------------------------"
    echo "This step will set up the tftp server in the $tftproot directory."
    echo
    # 接下来需要设定tftp服务器,需要root权限。
    echo "Note! This command requires you to have administrator priviliges (sudo access) "
    echo "on your host."
    read -p "Press return to continue" REPLY
    
    # 查看目录是否存在,如果存在,那么不用创建,如果不存在,那么就创建。
    if [ -d $tftproot ]; then
        echo
        echo "$tftproot already exists, not creating.."
    else
        sudo mkdir -p $tftproot
        check_status
        sudo chmod 777 $tftproot
        check_status
        sudo chown nobody $tftproot
        check_status
    fi
    
    #
    # #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
    #
    platform=`cat $cwd/../Rules.make | grep -e "^PLATFORM=" | cut -d= -f2`
    kernelimage="zImage-""$platform"".bin"
    # 之前编译好的文件
    kernelimagesrc=`ls -1 $cwd/../board-support/prebuilt-images/$kernelimage`
    # 如果tftp根目录下存在了对应的内核文件
    if [ -f $tftproot/$kernelimage ]; then
        echo
        echo "$tftproot/$kernelimage already exists. The existing installed file can be renamed and saved under the new name."
        # 由用户决定是使用哪种方式,重命名还是重写。
        echo "(r) rename (o) overwrite (s) skip copy "
        read -p "[r] " exists
        case "$exists" in
          s) echo "Skipping copy of $kernelimage, existing version will be used"
             ;;
          o) sudo cp $kernelimagesrc $tftproot
             check_status
             echo
             echo "Successfully overwritten $kernelimage in tftp root directory $tftproot"
             ;;
          *) dte="`date +%m%d%Y`_`date +%H`.`date +%M`"
             echo "New name for existing kernelimage: "
             # 默认用kernelimage名加上日期来代表老版本的文件名
             read -p "[ $kernelimage.$dte ]" newname
             if [ ! -n "$newname" ]; then
                 newname="$kernelimage.$dte"
             fi
             sudo mv "$tftproot/$kernelimage" "$tftproot/$newname"
             check_status
             sudo cp $kernelimagesrc $tftproot
             check_status
             echo
             echo "Successfully copied $kernelimage to tftp root directory $tftproot as $newname"
             ;;
        esac
    else
        # 当然如果文件本身就不存在,那么直接cp就行了。
        sudo cp $kernelimagesrc $tftproot
        check_status
        echo
        echo "Successfully copied $kernelimage to tftp root directory $tftproot"
    fi
    
    dtbfiles=`cd $cwd/../board-support/prebuilt-images/;ls -1 *.dtb`
    prebuiltimagesdir=`cd $cwd/../board-support/prebuilt-images/ ; echo $PWD`
    
    # 这里跟前面的kernel操作差不多。
    for dtbfile in $dtbfiles
    do
        if [ -f $tftproot/$dtbfile ]; then
            echo
            echo "$tftproot/$dtbfile already exists. The existing installed file can be renamed and saved under the new name."
            echo "(o) overwrite (s) skip copy "
            read -p "[o] " exists
            case "$exists" in
              s) echo "Skipping copy of $dtbfile, existing version will be used"
                 ;;
              *) sudo cp "$prebuiltimagesdir/$dtbfile" $tftproot
                 check_status
                 echo
                 echo "Successfully overwritten $$dtbfile in tftp root directory $tftproot"
                 ;;
            esac
        else
            sudo cp "$prebuiltimagesdir/$dtbfile" $tftproot
            check_status
            echo
            echo "Successfully copied $dtbfile to tftp root directory $tftproot"
        fi
    done
    
    echo
    # 如果tftpcfg文件已经存在,需要查看tftp配置中的tftp根目录是否在我们需要的位置,
    # 如果不在,那么还是需要另外配置。
    if [ -f $tftpcfg ]; then
        echo "$tftpcfg already exists.."
    
        #Use = instead of == for POSIX and dash shell compliance
        if [ "`cat $tftpcfg | grep server_args | cut -d= -f2 | sed 's/^[ ]*//'`" 
              = "$tftproot" ]; then
            echo "$tftproot already exported for TFTP, skipping.."
        else
            echo "Copying old $tftpcfg to $tftpcfg.old"
            sudo cp $tftpcfg $tftpcfg.old
            check_status
            tftp
        fi
    else
        # 如果tftpcfg文件不存在,那么就创建tftp配置文件。
        tftp
    fi
    
    echo
    echo "Restarting tftp server"
    sudo /etc/init.d/xinetd stop        # stop tftp服务
    check_status
    sleep 1
    sudo /etc/init.d/xinetd start       # start tftp服务使tftpcfg有效。
    check_status
    echo "--------------------------------------------------------------------------------"
  • 相关阅读:
    三年Android开发经验,挥泪整理字节跳动、微软中国凉经,你不看看吗?
    App怎么做才能永不崩溃
    做了八年的Android开发,谁不是一边崩溃,一边默默坚守!
    阿里员工年年绩效A,晒出收入后感叹:996虽然痛苦,发钱时候真香
    2021阅读书单
    不动产测绘概念
    Elasticsearch 集成
    Elasticsearch 环境
    Elasticsearch 优化
    Elasticsearch入门
  • 原文地址:https://www.cnblogs.com/zengjfgit/p/5397812.html
Copyright © 2011-2022 走看看