3.28号系统移植

系统移植就是给开发板搭建一个linux操作系统

1. 安装tftp服务器

tftp服务器作用:将ubuntu中指定的文件下载到开发板中

安装步骤

1. 首先需要保证ubuntu组网成功

2. 安装tftp服务器安装包

3. 在家目录下,创建tftpboot文件夹,并且添加最高权限

4. 配置tftp服务器

5. 重启配置文件

6. 重启tftp服务器

linux@ubuntu:~$ sudo service tftpd-hpa restart

7. 在本地测试tftp服务器是否安装成功

2. 安装nfs服务器

nfs服务器作用:将ubuntu中指定的文件夹挂载到到开发板中

安装步骤

1. 首先需要保证ubuntu组网成功

2. 安装nfs服务器安装包 

3. 在家目录下,创建nfs文件夹,并且添加最高权限 

4. 将群里下发的文件夹rootfs-ok.tar.xz,拷贝到~/nfs目录下 linux@ubuntu:~$ cd nfs linux@ubuntu:~/nfs$ tar -vxf rootfs-ok.tar.xz

5. 配置nfs服务器 

6. 重启nfs服务器

linux@ubuntu:~$ sudo service nfs-kernel-server restart

7. 在本地测试nfs服务器是否安装成功

3. gcc编译流程

4. gnu二进制工具集

4.1 gcc 编译命令

功能:将.s或者.c文件编译生成.o文件,只编译不链接

格式:gcc -c *.s -o *.o

例子:arm-linux-gnueabihf-gcc -O0 -g -c asm-led.S -o asm-led.o

4.2 ld 链接命令

功能:将.o文件链接生成.elf可执行文件

格式:ld -Ttext=链接地址 *.o -o *.elf

例子:arm-linux-gnueabihf-ld -Ttext=0xc0008000 asm-led.o -o asm-led.elf

4.3 objcopy 生成二进制文件

功能:将.elf可执行文件,通过objcopy命令生成某种格式的文件

格式:objcopy -O binary *.elf *bin

例子:arm-linux-gnueabihf-objcopy -O binary asm-led.elf asm-led.bin

4.4 objdump 生成反汇编文件

功能:将.elf可执行文件,通过objdump命令生成反汇编文件

格式:objdumo -D *.elf > *dis

例子:arm-linux-gnueabihf-objdump -D asm-led.elf > asm-led.dis

4.5 nm 查看符号表信息

功能:查看.elf文件符号表信息

格式:nm *.elf

例子:arm-linux-gnueabihf-nm asm-led.elf

4.6 size 查看各个段大小

功能:查看各个段大小信息

格式:size *.elf

例子:arm-linux-gnueabihf-size asm-led.elf

4.7 strip 压缩文件体积

功能:压缩可执行文件体积

格式:strip *.elf

例子:arm-linux-gnueabihf-strip asm-led.elf

4.8 addr2line

功能:根据地址信息,定位段错误的文件名和函数名,以及行号

格式:addr2line 地址 -e *.elf -f

5. 分析Makefile

#指定交叉编译工具链前缀名字
CROSS_COMPILE = arm-linux-gnueabihf-
#指定文件名
NAME = interface
#========================================================#
#-g:添加gdb调试信息
#-marm:编译生成arm指令集
#-Wall:编译时,显示所有的警告信息
#-O0:不优化
# -fno-builtin:不可以使用linux操作系统提供库函数
#-nostdinc:不可以使用linux操作系统中提供的头文件
#-I:指定头文件路径                                               
CFLAGS += -g -marm -Wall -O0 -mabi=apcs-gnu -mfpu=neon -mfloat-abi=softfp -fno-builtin \
            -nostdinc -I./common/include    -I./include  
#LD:链接
LD    = $(CROSS_COMPILE)ld
#CC:编译
CC    = $(CROSS_COMPILE)gcc
#NM:查看符号表信息
NM  = $(CROSS_COMPILE)nm
#OBJCOPY:生成二进制文件
OBJCOPY = $(CROSS_COMPILE)objcopy
#OBJDUMP:生成反汇编文件
OBJDUMP = $(CROSS_COMPILE)objdump
#================================================#
#wildcard是Makefile中内置函数
#函数功能:将指定目录下,按照某种格式进行展开,中间用空格隔开
#参数:需要指定的目录,以及展开格式的文件
#返回值:展开后的结果
OBJSss     := $(wildcard start/*.S) $(wildcard common/src/*.S) $(wildcard *.S)\
           $(wildcard start/*.c) $(wildcard common/src/*.c)                \
           $(wildcard src/*.c) $(wildcard *.c) 
#patsubst是Makefile中内置函数
#函数功能:将指定目录下,完成指定格式替换
#参数:1)源字符串格式 2)目标字符存替换格式 3)替换的目录
#返回值:替换后的结果
OBJSs      := $(patsubst %.S,%.o,$(OBJSss))
OBJS     := $(patsubst %.c,%.o,$(OBJSs))

%.o: %.S 
    @echo "  AS      $@"
    @#$@:目标  $<:第一个依赖 $^:所有依赖
    @#将所有的.s文件编译生成.o文件
    @$(CC) $(CFLAGS) -c -o  $@ $<

%.o: %.c
    @echo "  CC      $@"
    @#将所有的.c文件编译生成.o文件
    @$(CC) $(CFLAGS) -c -o  $@ $<

all:clean  $(OBJS)
    @echo "  LD      Linking $(NAME).elf"
    @#将所有的.o文件,根据map.lds文件,链接生成.elf文件
    @$(LD)  $(OBJS) -T map.lds -o $(NAME).elf

    @echo "  OBJCOPY Objcopying $(NAME).bin"
    @#将.elf文件通过objcopy命令生成.bin文件
    @$(OBJCOPY)  -O binary  $(NAME).elf $(NAME).bin 

    @echo "  MAP     Generating $(NAME).map"
    @#将.elf文件的符号表信息,重定向到.map文件中
    @$(NM) $(NAME).elf > $(NAME).map 

    @echo "  OBJDUMP Objdumping $(NAME).dis"
    @#将.elf文件生成反汇编文件,重定向到.dis文件中
    @$(OBJDUMP) -DS $(NAME).elf > $(NAME).dis 

distclean clean:
    @rm -rf $(OBJS) *.elf *.bin *.dis *.map
    @echo "  CLEAN   complete."

install:
    sudo cp $(NAME).bin /mnt/hgfs/share/

show:
    @echo $(OBJSss)
    @echo $(OBJSs)
    @echo $(OBJS)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值