ti processor sdk linux am335x evm /bin/setup-tftp.sh hacking

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: #!/bin/sh # # ti processor sdk linux am335x evm /bin/setup-tftp.sh hacking # 说明: # 本文主要对TI的sdk中的setup-tftp.sh脚本进行解读,是为了了解其工作机制。
#!/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 "--------------------------------------------------------------------------------"

 

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
Shell Linux Android开发
【Linux】【编译相关】execvp: /bin/sh: Argument list too long问题处理小结
【Linux】【编译相关】execvp: /bin/sh: Argument list too long问题处理小结
1516 0
|
3月前
|
Oracle Java 关系型数据库
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
如果遇到"exec format error"问题,文章建议先检查Linux操作系统是32位还是64位,并确保安装了与系统匹配的JDK版本。如果系统是64位的,但出现了错误,可能是因为下载了错误的JDK版本。文章提供了一个链接,指向Oracle官网上的JDK 17 Linux版本下载页面,并附有截图说明。
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
|
数据采集 Linux 数据处理
星嵌 OMAPL138工业核心板 TI ARM9+DSP C674x Linux C6000 uPP
SOM-XQ138基于TI OMAP-L138定点/浮点DSP C674x+ARM9处理器,双核主频456MHz,C6000 DSP + ARM设计的核心板;
星嵌 OMAPL138工业核心板 TI ARM9+DSP C674x Linux C6000 uPP
|
Java Unix Linux
CentOS7安装jdk后输入Java-version出现-bash: /usr/java/jdk1.8.0_271/bin/java: /lib/ld-linux.so.2: bad ELF in
CentOS7安装jdk后输入Java-version出现-bash: /usr/java/jdk1.8.0_271/bin/java: /lib/ld-linux.so.2: bad ELF in
CentOS7安装jdk后输入Java-version出现-bash: /usr/java/jdk1.8.0_271/bin/java: /lib/ld-linux.so.2: bad ELF in
|
Linux 开发工具 芯片
Linux系统中SDK基本介绍
Linux系统中SDK基本介绍
466 0
Linux系统中SDK基本介绍
bin/arm-linux-androideabi-nm: libtinfo.so.5: cannot open shared object file: No such file or directo
bin/arm-linux-androideabi-nm: libtinfo.so.5: cannot open shared object file: No such file or directo
109 0
|
28天前
|
Linux 网络安全 数据安全/隐私保护
Linux 超级强大的十六进制 dump 工具:XXD 命令,我教你应该如何使用!
在 Linux 系统中,xxd 命令是一个强大的十六进制 dump 工具,可以将文件或数据以十六进制和 ASCII 字符形式显示,帮助用户深入了解和分析数据。本文详细介绍了 xxd 命令的基本用法、高级功能及实际应用案例,包括查看文件内容、指定输出格式、写入文件、数据比较、数据提取、数据转换和数据加密解密等。通过掌握这些技巧,用户可以更高效地处理各种数据问题。
69 8
|
28天前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
190 6
|
29天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
73 3
|
29天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
65 2