嵌入式驱动开法所需工具

目录

1 库依赖

交叉编译工具

#先更新,否则安装库可能会出错
sudo apt-get update 
#//安装依赖库
sudo apt-get install lsb-core lib32stdc++6  

TF-A

  1. 设备树依赖
sudo apt-get install device-tree-compiler

U-Boot

  1. 编译u-boot时的依赖,否则会编译出错。
sudo apt-get install libncurses5-dev bison flex
  1. U-Boot 图形化配置依赖:需要 ncurses 库。curses 库提供了一系列的 API 函数供调用者生成基于文本的图形界面。
sudo apt-get install build-essential
sudo apt-get install libncurses5-dev

kernel

1.编译内核需要lzop库

sudo apt-get update
sudo apt-get install lzop
sudo apt-get install libssl-dev	
  1. mkimage工具

STM32MP1 编译出来的 Linux 内核镜像文件为 uImage,这是 uboot 所使用的内核镜像格式,通过在 zImage 镜像的前面添加 0X40 个字节的头部来得到 uImage,这个需要 mkimage 工具来完成此工作。

sudo apt-get install u-boot-tools

2 开发环境依赖

gcc、g++、make

gcc、g++、make 等工具,这里我们直接安装 build-essential 软件包即可。

sudo apt-get install build-essential

TFTP文件传输

Ubuntu 主机作为 TFTP 服务器,需要设置正确的tftp服务器及其目录,可以运用网络下载文件到DRAM。

sudo apt-get install tftp-hpa tftpd-hpa
sudo apt-get install xinetd

mkdir /home/zuozhongkai/linux/tftpboot
chmod 777 /home/zuozhongkai/linux/tftpboot

#配置 tftp,新建文件/etc/xinetd.d/tftp,如果没有/etc/xinetd.d 目录的话自行创建,然后在
#里面输入如下内容:
######################################################
#server tftp
#{
#	socket_type = dgram
#	protocol = udp
#	wait = yes
#	user = root
#	server = /usr/sbin/in.tftpd
#	server_args = -s /home/XX/linux/tftpboot/
#	disable = no
#	per_source = 11
#	cps = 100 2
#	flags = IPv4
#}

#启动 tftp 服务
sudo service tftpd-hpa start	

#打开/etc/default/tftpd-hpa 文件,将其修改为如下所示内容:
#######################################################
## /etc/default/tftpd-hpa
#TFTP_USERNAME="tftp"
#TFTP_DIRECTORY="/home/liangwencong/linux/tftpboot"
#TFTP_ADDRESS=":69"
#TFTP_OPTIONS="-l -c -s"

#重启 tftp服务器,至此tftp服务器搭建好了
sudo service tftpd-hpa restart	

FTP文件传输

Windows 和 Ubuntu 下的文件互传我们需要使用 FTP 服务,设置方法如下:

sudo apt-get install vsftpd

sudo vi /etc/vsftpd.conf

#使能下面两个变量
#local_enable=YES
#write_enable=YES

#重启 FTP 服务
sudo /etc/init.d/vsftpd restart

NFS远程挂载

设置正确的nfs服务器及其目录。

#安装 NFS 服务
sudo apt-get install nfs-kernel-server rpcbind

#打开 nfs 配置文件/etc/exports,后面添加如下所示内容:
#/home/zuozhongkai/linux/nfs *(rw,sync,no_root_squash)

#重启 NFS 服务
sudo /etc/init.d/nfs-kernel-server restart

SSH远程终端

开启 Ubuntu 的 SSH 服务,使用终端软件登陆到 Ubuntu。

sudo apt-get install openssh-server

交叉编译器

安装交叉编译工具链(编译器),包括许多编译工具,包括ld,gcc,gcc,dtc等,存在工具的bin文件下。

  • 交叉编译器复制到/usr/local/arm 这个目录中,并解压。

  • 修改环境变量,打开/etc/profile 文件,在最后面输入如下所示内容:

export PATH=$PATH:/usr/local/arm/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf/bin
  • 重启 Ubuntu 系统,交叉编译工具链(编译器)就安装成功了

3 工具依赖

stm32wrapper4dbg

编译 TF-A 或者 Uboot 的时候需要用到 stm32wrapper4dbg 这个工具,否则编译会报错。

STM32CubeMX

STM32CubeMX是图形化配置工具,可以直观的选择MCU/MPU型号,可以动态地配置引脚、配置时钟树、配置中间件、配置内存,可以生成初始化代码、MPU设备树源码,可以进行DDR测试等。STM32CubeMX的好处是具有直观的图形配置界面,而且它把很多东西封装的比较好,例如硬件抽象层、中间层、外围器件和示例代码以及Arm Cortex-A内核部分Linux设备树等。

STM32CubeIDE

它集成 了TrueSTUDIO STM32CubeMX 插件,并基于 GDB 进行调试,它允许集成数百个现有插件,这些插件完成 Eclipse 的功能。

TrueSTUDIO 插件是一款建立在 Eclipse CDT、GCC 和 GDB 的 C/C++集成开发工具,其具有项目创建和管理、代码编辑、代码编译以及代码调试等功能。

STM32CubeIDE 完全开源,并且跨平台,目前支持 Windows、Linux 和 macOS 多个操作系统(64 位版本) 。

tm32image

第二进制启动文件需要在前面加上二进制头文件,在最后由.bin文件生成.stm32文件需要用到。

winhex

打开添加了头文件的烧写固件,对固件以十六进制的形式打开。

STM32CubeProgrammer

为用户提供 STM32 微控制器代码烧写和固件安全安装、更新功能,帮助用户更快地开发特定外部存储器的加载程序。

STM32CubeProgrammer 支持对外部存储器进行编程、擦除和验证,用户烧写 STM32微控制器既可使用片上 SWD (单线调试)或 JTAG 调试端口,也可以用程序引导装入端口(例如UART 和 USB)。它支持 Motorola S19、Intel HEX、ELF 和 二进制格式(BIN 文件) ,支持 ST-LINK 固件更新,支持图形化界面操作也支持命令行操作,在命令行界面,可通过脚本实现自动化编程。

STM32CubeProgrammer 支持 Windows、Linux 和 macOS 多个操作系统(64 位版本) 。

4 工程文件类型

烧写文件

.tsv烧写时候的布局文件。

tf-a

.stm32烧写固件文件,添加好头部信息的bin文件,直接烧写。

.map内存映射文件。

.ld连接信息。

.patch补丁文件。

.bin开发板对应的TF-A二进制执行文件。

.elf生成bin文件所需要的文件。

u-boot

.lds链接脚本文件。

.cfg:u-boot的另一种配置文件。

.dtb:设备数文件编译后的文件。

.srec:S-Record 格式的镜像文件。

.sym:uboot 符号文件。

.stm32:最终需要的烧写文件。

.map:映射文件,通过查看此文件可以知道某个函数被链接到了哪个地址上。

.cmd:存储文件名相关的命令的文件,描述相关文件是如何产生的。

.S:汇编语言文件,ARM架构,向量表是一个特殊的数据结构,其中包含处理器异常和中断处理程序的地址。

bootfs

.dtb:设备树文件。

.ext4:内核烧写ext4格式的文件系统,将Uimage.dtb一起打包而成,ext4类型的文件系统。

  • 文件系统有很多种,如: ext4、initramfs、ramfs 等。

device tree

.dts设备树文件,也可以被别的设备树引用。

.dtsi设备树头文件。

.dtb设备树文件编译后文件,开发板需要烧写的文件。

DTC 是编译设备树的编译工具。

5 工程目录讲解

/home/XX/linux/tf-a/tf-a-stm32mp-2.2.r1-r0

├── 0001-st-update-v2.2-r2.0.0.patch	#补丁文件
├── Makefile.sdk						#编译属性设置文件
├── README.HOW_TO.txt
├── series		#补丁源文件
└── tf-a-stm32mp-2.2.r1	#tf-a源文件
    ├── bl1		#Tf-a四个启动阶段文件 bl1一般为内部ROM ----|
    ├── bl2		# ...可信启动固件	-----------------------|
    ├── bl2u	#...									| ---> 宏观的tf-a,bl2是传统意义上的tf-a 
    ├── bl31	#...EL3 运行时固件(RuntimeFirware)      	|
    ├── bl32	#...安全操作系统(OP-TEE)	---------------|
    ├── common
    ├── CONTRIBUTING.md
    ├── dco.txt
    ├── docs
    ├── drivers			#设备
    ├── fdts			#文件树文件
    ├── include
    ├── lib
    ├── license.rst
    ├── Makefile		#编译主文件
    ├── make_helpers
    ├── plat
    ├── readme.rst
    ├── services
    └── tools
└── build			#编译生成烧写文件 
    ├── optee		#针对OP-TEE
    ├── serialboot	#串行启动 ----> tf-a-stm32mp157d-atk-serialboot.stm32
    └── trusted		#保存MP1型号的TF-A固件镜像 ---->  tf-a-stm32mp157d-atk-trusted.stm32

/home/XX/linux/u-boot/alientek-u-boot

想要分析源码,先进性编译,编译生成的文件是分析源码不可缺少的文件。

├── api		#与硬件无关的 API 函数	自带
├── arch	# *** 重要*** 与硬件架构体系有关的代码	自带	****		<------- ./arm/dts/dts  设备树
├── board	# ***重要*** 不同板子(开发板)的定制代码	自带	****		<------	./st st的板子都在这个下面
├── build.sh
├── cmd		# 命令相关代码	自带
├── common	#	通用代码	自带
├── config.mk		# 图形配置界面描述文件 自带
├── configs	# *** 重要 *** 配置文件 自带	***						<--------
├── CONTRIBUTING.md
├── disk	# 磁盘分区相关代码	自带
├── doc		# 文档	自带
├── drivers	# 驱动代码	自带
├── dts		# 设备树	自带
├── env
├── examples		# 示例代码	自带
├── fs				# 文件系统	自带
├── include			# 头文件
├── Kbuild	# 			用于生成一些和汇编有关的文件
├── Kconfig	# 			图形配置界面描述文件,是一个脚本文件。
├── lib				# 库文件
├── Licenses		# 许可证相关文件
├── MAINTAINERS		# 维护者联系方式文件
├── Makefile	# ***重要***  主Makefile文件 ***  			<-------------
├── net			# 网络相关代码
├── post		# 上电自检程序
├── README		# 帮助文档 自带
├── scripts			# 脚本文件
├── System.map		# 系统映射文件	编译生成 
├── test			# 测试代码	自带
├── tools			# 工具文件夹	自带
├── u-boot			# 编译出来的 u-boot 文件 编译生成
├── u-boot.bin
├── u-boot.cfg
├── u-boot.cfg.configs
├── u-boot.dtb
├── u-boot-dtb.bin
├── u-boot.lds
├── u-boot.map		# 此文件看到某个 文件 或者 函数 链接到了哪个 地址
├── u-boot-nodtb.bin
├── u-boot.srec
├── u-boot.stm32
├── u-boot.stm32.log
├── u-boot.sym
├──.config			# *** 重要 *** 配置文件; 使用命令“make xxx_defconfig”配置 uboot编译生成的	***				<----
├──.gitignore		# git工具相关列表	
└──.u-boot.xx.cmd	# ***重要*** 一系列的文件,用于保存着一些命令	编译生成 ***	                         <----		

ld.bfd 将各个built-in.o 文件链接在一起 -> u-boot(ELF) -> u-boot-nodtb.bin -> u-boot-dtb.bin -> u-boot.stm32

/home/XX/linux/kernel/alientek-kernel

├── arch		# 架构相关目录	<--------
├── block		# 块设备相关目录	<---------
├── build.sh
├── certs
├── CONTRIBUTING.md
├── COPYING
├── CREDITS
├── crypto		# 加密相关目录 crc crc32 md4 md5 hash等加密算法	<---------
├── Documentation
├── drivers		#驱动			<----------
├── fs			#文件系统		<---------
├── include		#头文件		<--------
├── init		#初始化		<---------
├── ipc			#进程之间相关通信		<----------
├── Kbuild		#主makefile读取相关信息,进行子makefile的读取  ***
├── Kconfig		#图像化配置界面  ***
├── kernel		# 内核		<-------------
├── lib			#库相关文件	<---------
├── LICENSES
├── MAINTAINERS
├── Makefile	#		<------------
├── mm			# 内存	<------------
├── modules.builtin.modinfo
├── Module.symvers
├── net			#网络		<----------
├── README
├── samples
├── scripts		#脚本
├── security	#安全目录	<-----------
├── sound		#音频目录		<--------------
├── stm32mp157d_atk.sh		#编译脚本
├── System.map
├── tools		#工具相关
├── usr			#用于生成initramfs
├── virt		#虚拟化
├── vmlinux
└── vmlinux.o
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值