嵌入式软件开发培训笔记——ARM架构Linux系统下交叉编译环境搭建、NFS、TFTP服务配置及Na

2019-07-12 22:34发布

bootloader原理和开发——>kernel构建——>文件系统/根文件系统(filesystem/rootfs)APP




一、配置交叉编译环境(可参考嵌入式Linux移植与驱动开发cortexa8中交叉工具链的安装)     1、准备文件arm-cortex_a8-linux-gnueabi.tar.bz2     2、解压以上文件到当前用户目录下,如/home/linux/gcc     3、进入超级用户模式sudo -s     4、用vi打开/etc/bash.bashrc文件配置环境变量,在文件最后添加下面一句话             export PATH=$PATH:/home/linux/gcc/arm-cortex_a8-linux/bin/     5、使用source /etc/bash.bashrc更新下,以便虚拟机重启后该配置仍生效     6、修改Makefile文件,用于arm架构下编译源文件 二、开发板下载程序三种方法     1、RS232     2、Net Ethernet网线     3、USB 三、头文件、初始化文件、驱动等等,文件最好分门别类存放 四、GCC过程&头文件及库的使用方法     编译器环境arm-cortex_a8-linux-gnueabi-     1、GCC             gcc -E预处理 生成    .i             gcc -c编译     生成    .s             gcc -S汇编     生成    .o             gcc -ld链接 ld可不写    生成可执行文件     2、头文件用法             自定义头文件在使用gcc时用参数    -I头文件路径     3、静态库              arm-cortex_a8-linux-gnueabi-gcc -I$(INCLUDE) -c hello/hello.c -o hello/hello.o              arm-cortex_a8-linux-gnueabi-ar -rcs hello/libhello.a hello/hello.o              静态库,运行可执行文件不再需要     4、动态库              arm-cortex_a8-linux-gnueabi-gcc -I$(INCLUDE) -c good/good.c -o good/good.o              arm-cortex_a8-linux-gnueabi-gcc -shared -fpic  -o good/libgood.so  good/good.o              动态库,运行可执行文件也需要指定库文件名以及库文件路径     5、反汇编命令               arm-cortex_a8-linux-gnueabi-objdump -d test>test.dis     6、生成bin文件               arm-cortex_a8-linux-gnueabi-objcopy -o binary test test.bin     7、缩减test文件大小,丢弃一些不要的东西               arm-cortex_a8-linux-gnueabi-strip test     8、打印出文件中的字符串,用法同7,strip改为string 五、搭建下载环境(TFTP与NFS的配置可参考嵌入式linux操作系统的使用中网络配置一文)     1. 开发板tftp使用        1.1 开发板跟tftp服务器通过网线相连            1.2 在开发板串口终端ping tftpserver  (ping 192.168.3.3)        host 192.168.3.3 is alive                需要设置环境变量(printev setenv)        gatewayip=192.168.1.1        ipaddr=192.168.3.5        netmask=255.255.0.0        serverip=192.168.3.3            例:          setenv ipaddr 192.168.3.5          saveenv            1.3 设置tftp 服务器端服务(主机)            sudo /etc/init.d/tftpd-hpa restart        tftpd-hpa stop/waiting        tftpd-hpa start/running, process 11471            安装tftp --> 配置服务器 (sudo vim /etc/default/tftpd-hpa)        --> 本机测试(tftp localhost)-->开发板测试(tftp 20008000 zImage  go 20008000)            1.4 设置nfs 服务 (主机)       sudo /etc/init.d/nfs-kernel-server restart       Exporting directories for NFS kernel daemon...                                                               * Starting NFS kernel daemon                   安装tftp服务--> 配置nfs (sudo vim /etc/exports)-->提供rootfs (tar xvf rootfs.tgz)         ---> 本机测试(sudo mount -t nfs localhost:/source/rootfs ./temp)-->开发板测试             开发板终端:         setenv bootargs root=nfs nfsroot=192.168.3.3:/source/rootfs ip=192.168.3.5 init=/linuxrc             console=ttySAC0,115200         saveenv         1.5再次tftp 20008000 zImage---->go 20008000                  注:setenv bootcmd tftp 20008000 zImage;go 20008000一键执行        run bootcmd
六、将编译好的zImage及制作好的文件系统固化在nand flash中,zImage使用地址 100000-400000    nfs使用地址400000-800000         1、使用命令nand erase 100000 300000        //插除nand flash中100000~400000地址的数据    300000为数据块size(大小)         2、tftp 20008000 zImage        //zImage为编译好的bootleader程序         3、使用命令nand write 20008000 100000 300000        //将zImage写入nand flash中100000~400000地址范围内                  4、使用命令nand erase 400000 400000         5、tftp 20008000 rootfs.cramfs        //rootfs.cramfs为制作好的文件系统         6、使用命令nand write 20008000 400000 400000
        7、改bootcmd——>setenv bootcmd nand read 20008000 100000 300000;go 20008000         8、改bootargs——>setenv bootargs root=/dev/mtdblock2 ip=192.168.1.111 init=/linuxrc console=ttySAC0,115200 注:此外u-boot也是通过这个方法写入Nand Flash中。 Nand Flash中内容的构成一般为: 七、将写好的裸机代码xxx.bin烧写到nand中         1、nand erase a00000 4000                    !!!要注意文件大小      4000的size 最多只能放16K的文件         2、nand write 20008000 a00000 4000         3、setenv bootcmd nand read 20008000 a00000 4000;go 20008000    //将nand flash中a00000中4000size的数据读取到内存20008000的地址处,然后执行内存20008000地址开始的代码程序