系统移植就是给开发板搭建一个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).disdistclean 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)