自学内容网 自学内容网

linux系统移植---有关于tftp服务

1. 什么是tftp服务

tftp : 基于UDP开发的简单文本传输协议。

作用:通过网络的方式将ubuntu中的文件传输给开发板。

2. tftp服务的工作原理

  1. 设置开发板的启动方式为EMMC启动方式或者TF卡启动。
  2. PC端与开发板用网线连接,开发板上电,启动uboot
  3. 在SecureCRT串口工具中(串口工具与开发板用串口的USB线连接):
    1. 在挂载倒计时位0之前,按下电脑的任意键进入交互模式
    2. 使用tftp下载ulmage到内存中
    3. 使用tftp下载stm32mp157a-fsmla.dtb到内存中
  4. ubuntu中:
    1. tftp服务:/home/linux/tftpboot
    2. 存放要下载到开发板中的文件ulmage:linux内核的镜像文件stm32mp157a-fsmp1a.dtb:linux内核的设备树文件

3. 在ubuntu系统中安装tftp服务

  1. 安装tftp服务(ubuntu必须可以上网)
    1. sudo apt-get update ---->更新源
    2. sudo apt-get install tftpd-hpa tftp-hpa
      1. tftpd-hpa:服务器端
      2. tftp-hpa:客户端
  2. 修改1tftp服务的配置文件
    1. 打开tftp服务的配置文件:
      1. sudo vi /etc/default/tftpd-hpa
    2. 修改文件内容为如下内容:
      1. 打开tftp服务的配置文件:
        1. sudo vi /etc/default/tftpd-hpa
      2. 要文件内容修改为:
        1. # /etc/default/tftpd-hpa
        2. TFTP_USERNAME="tftp"
        3. TFTP_DIRECTORY="/var/tftpboot"
        4. TFTP_ADDRESS=":69"
      3. 修改为:
        1. # /etc/default/tftpd-hpa
        2. TFTP_USERNAME="tftp"
        3. TFTP_DIRECTORY="自己的tftpboot文件所在的目录"
        4. TFTP_ADDRESS=":69"
        5. TFTP_OPTIONS="-c -s -l"
    3. 在ubuntu的家目录下创建tftpboot目录

                tftpboot目录的作用:将要使用tftp服务下载到开发板的程序存到这个目录下,

                如果找到对应的文件则进行下载,如果没有找到则报"file not found"

                $ cd ~

                $mkdir tftboot

                $chmod 777 tftpboot

             4. 重启tftp服务(重启tftp服务的命令必须记住,后边会经常使用)

                $ sudo service tftpd-hpa restart

                注意:只要修改了tftp服务中配置文件的参数,就需要重启tftp服务,

                           使tftp服务配置文件中的配置立即生效。

             5. 本地测试tftp服务是否安装成功

                $tftp 127.0.0.1 ----> 使用tftp客户端连接本地的tftp服务

                tftp >                ----->表示tftp服务连接成功

                tftp > get 1.txt  ----->从~/tftpboot目录下下载文件到当前目录下,

                                                因此需要在下载之前在~/tftpboot目录下创建1.txt

                tftp > put 2.txt  ------>将当前1目录下的2.txt文件上传到~/tftphoot目录下,

                                                因此需要在上传之前在当前目录下创建2.txt

                tftp > quit         ------>退出

                退出之后使用“ls”命令查看是否下载或者上传成功。

4. 安装NFS服务

4.1 什么是NFS服务

      NFS:Network File System 网络文件系统

      作用:开发板启动linux系统之后,通过网络的方式从ubuntu服务中挂载根文件系统,

                 也就是说将开发板的文件系统放到ubuntu服务器中,让开发板通过NFS的方式

                  挂载根文件系统,这种文件系统就是网络文件系统。

4.2 NFS文件系统工作原理

  1. 设置开发板的启动方式为EMMC启动方式或者TF卡启动。
  2. PC端与开发板用网线连接,开发板上电,启动uboot
  3. 在SecureCRT串口工具中(串口工具与开发板用串口的USB线连接):
    1. 在挂载倒计时位0之前,按下电脑的任意键进入交互模式
    2. 使用tftp下载ulmage到内存中
    3. 使用tftp下载stm32mp157a-fsmla.dtb到内存中
  4. ubuntu中:
    1. tftp服务:/home/linux/tftpboot
    2. 存放要下载到开发板中的文件ulmage:linux内核的镜像文件stm32mp157a-fsmp1a.dtb:linux内核的设备树文件
    3. NFS服务:/home/linux/rootfs
    4. 网络文件系统:/bin /dev /etc /home /usr /mnt /var /lib /root ......
  5. linux内核启动成功后,通过nfs从ubuntu服务器中挂载根文件系统

4.3 安装NFS网络文件系统

  1. 安装NFS网络文件系统
    1. sudo apt-get install nfs-kernel-server
  2. 修改nfs服务的配置文件
    1. 打开sudo vi /etc/exports,在配置文件的最后一行添加以下内容
      1. /home/linux/rootfs *(rw,sync,no_root_squash,on_subtree_check)
    2. 解释:
      1. /home/linux/rootfs:网络根文件系统的路径,修改为自己的路径
      2. * ---> 指所有用户
      3. rw ---> 对根文件系统可读可写的权限
      4. sync ---> 同步文件
      5. no_root_squash ---> 来访的root用户保持root账号权限
      6. no_subtree_check ---> 即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率
    3. 注意:
      1. 前面不可以加#,#是注释  可以注释默认的配置,添加自己的配置
  3. 在ubuntu系统的家目录下解压缩开发板对应的根文件系统
    1. 拷贝根文件系统的压缩包到ubuntu系统家目录下可以使用共享文件夹或者直接拖拽。
      1. rootfs-ok.tar.xz ----> 根文件系统的压缩包
    2. 使用tar命令对根文件系统进行解压缩
      1. tar -xvf rootfs-ok.tar.xz
      2. 解压缩之后会得到一个rootfs的文件夹,rootfs文件夹就是开发板的根文件系统
      3. 注意,不可在windows下对rootfs-ok.tar.xz压缩包进行解压缩,windows不支持软连接文件
  4. 重启nfs服务使其立即生效(必须记住重启nfs服务的命令)
    1. sudo service nfs-kernel-server restart
    2. 注意:只要修改配置文件,就要重启服务
  5. 本地查看nfs服务是否安装成功
    1. sudo mount -t nfs IP地址:/home/linux/rootfs    /mnt
    2. IP地址可以用本地回环测试地址:127.0.0.1
    3. 使用nfs网络文件系统挂载根文件系统到/mnt目录下,IP地址必须是自己ubuntu的IP地址。
    4. -t nfs :指定文件系统类型,使用nfs服务的方式进行挂载
    5. 是否挂在成功可以使用以下命令进行查看:ls /mnt
    6. 测试没有问题,可以执行取消挂载的命令:sudo umount /mnt

5. gnu命令的扩展

5.1 gcc/g++命令

        gcc : 编译C语言

        g++ : 编译C++语言

        四部曲:预处理、编译、汇编、链接

  1. 预处理:展开头文件,删除注释,宏替换,不会检查语法错误
    1. gcc -E xxx.c -o xxx.i
  2. 编译:语法分析,词法分析,语义分析,检查语法错误,生成一个汇编文件
    1. gcc -S xxx.i -o xxx.s
  3. 汇编:将汇编文件生成一个二进制文件
    1. gcc -c xxx.s -o xxx.o
  4. 链接:链接库文件,生成可执行文件
    1. gcc xxx.o -o xxx

5.2 gdb命令

意义:代码调试的命令。

1. 使用gcc进行编译生成可执行程序

        gcc -g xxx.c -i xxx

        -g :添加gdb调试信息

2. 使用gdb命令启动程序

        gdb 可执行程序名

3. gdb工具内部的命令

  1. quit ---> 退出
  2. list   ---> 列出代码
  3. run  ---> 运行程序
  4. continue ---> 继续运行程序
  5. break ---> 打断点
    1. break 行号 ---> 打断点在对应的行
    2. info b          ---> 查看断点的信息
    3. delete 编号 ---> 删除断点
  6. 单步执行
    1. next
    2. step
  7. 查看变量的值
    1. print

5.3 ld 命令

作用:链接的命令,将.o文件链接生成elf格式的可执行文件

5.4 objcopy 命令

作用:格式化拷贝命令,将.elf文件格式化拷贝生成.bin文件

5.5 objdump 命令

作用:反汇编命令,将.elf文件生成反汇编.dis文件

5.6 nm 命令

作用:查看文件符号信息

        符号:变量名/函数名

5.7 size 命令

作用:查看elf文件各个段的大小

5.8 readelf 命令

作用:读取ELF文件的信息

5.9 strip 命令

作用: 压缩文件体积,比如可以删除elf文件中无用的信息,不影响程序的运行。

使用场合:嵌入式设备的存储空间有限,可以使用strip命令压缩文件的体积,节约存储空间


原文地址:https://blog.csdn.net/2303_78438820/article/details/144298939

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!