一、虚拟机系统的安装
使用Parallels Desktop 推荐的方式直接安装Ubuntu/Debian即可,这里我选择Debian(8G丐版在实际跑ubuntu的时候,用了几天,后面内存占用较高,改小运行内存后会出现闪退的情况,具体原因没有深究。Debian使用体验确实不错,使用的是xfce4桌面,这里先给大家避个雷)
博主这里默认的硬件配置是2核心+2G内存,实际体验很不错,暂时没发现卡顿。
安装过程全程不用动电脑,等待就好,硬件配置后面可以在虚拟机的配置中修改。
二、 基本环境的配置和源的替换
这里仍然不用赘述,我使用的是清华源,注意替换好源之后要更新。
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-freedeb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-freedeb https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free
sudo apt-get update
sudo apt-get upgrade
三、安装交叉编译工具链
方法一:(缺点,只能在裸机开发下工作正常,编译uboot会出现问题,具体原因没有深究)
这里看过正点原子教程的都知道是在 linaro中下载解压安装的,但是教程中是针对x86架构的ubuntu,实际上我们安装的是arm架构的虚拟机,安装是一定会出问题的。
但是之前在ubuntu试图安装的时候偶然发现gcc-arm-linux-gnueabihf,然后就尝试了一波如下命令
sudo apt-get install gcc-arm-linux-gnueabihf
然后就安装成功了,看一下版本信息是没问题的。
可以看到主机是aarch64,证明版本安装正确。
方法二:
由于在线安装交叉编译工具链会存在问题,于是推荐大家使用arm官方发行的交叉编译工具链进行安装下载地址,验证后发现可以进行uboot编译,但是编译命令脚本会和正点原子官方所提供的有所差别。安装好后,修改环境变量
sudo vi /etc/profile
重启查看版本号
验证成功,下一篇文章会进行uboot编译验证。
四、进行Linux 裸机下载验证
我们在虚拟机上写好测试的程序之后,生成.bin文件
这里使用Makefile编译
CROSS_COMPILE ?= arm-linux-gnueabihf
TARGET ?= bsp
GCC := $(CROSS_COMPILE)-gcc
LD := $(CROSS_COMPILE)-ld
OBJCOPY := $(CROSS_COMPILE)-objcopy
OBJDUMP := $(CROSS_COMPILE)-objdump
INC_DIRS := imx6ul \
bsp/clk \
bsp/led \
bsp/delay \
bsp/key \
bsp/gpio \
SRC_DIRS := project \
bsp/clk \
bsp/led \
bsp/delay \
bsp/key \
bsp/gpio \
INCLUDE := $(patsubst %, -I %, $(INC_DIRS))
S_DIR_FILES := $(foreach dir, $(SRC_DIRS), $(wildcard $(dir)/*.S))
C_DIR_FILES := $(foreach dir, $(SRC_DIRS), $(wildcard $(dir)/*.c))
S_FILES := $(notdir $(S_DIR_FILES))
C_FILES := $(notdir $(C_DIR_FILES))
S_OBJS := $(patsubst %, obj/%, $(S_FILES:.S=.o))
C_OBJS := $(patsubst %, obj/%, $(C_FILES:.c=.o))
OBJS := $(S_OBJS) $(C_OBJS)
VPATH := $(SRC_DIRS)
.PHONY: clean
$(TARGET).bin : $(OBJS)
$(LD) -Timx6ul.lds -o $(TARGET).elf $^
$(OBJCOPY) -O binary -S $(TARGET).elf $@
$(OBJDUMP) -D -m arm $(TARGET).elf > $(TARGET).dis
$(S_OBJS) : obj/%.o : %.S
$(GCC) -Wall -nostdlib -c -O2 $(INCLUDE) -o $@ $<
$(C_OBJS) : obj/%.o : %.c
$(GCC) -Wall -nostdlib -c -O2 $(INCLUDE) -o $@ $<
clean:
rm -rf $(TARGET).elf $(TARGET).dis $(TARGET).bin $(OBJS)
此时进行下载验证会报错,因为之前正点原子的imxdownload 执行文件是在x86端编译的,显然我们在arm平台上要重新编译一次。
重新编译imxdownload
再将其拷贝到项目工程目录下 ,再次进行验证
下载成功!
至此,裸机开发部分,暂时没遇到其他问题。可以开心的在M1上进行Linux 裸机学习咯