【DAY38】ARM 架构嵌入式开发核心:最小系统设计、Linux 驱动与系统烧写要点总结
一、ARM总结单片机最小系统电源电路晶振电路复位电路ARM裸机大内存 大外存SD卡(IMUX6ULL) 512M 8GARM - 处理架构 - Cortex-A7 (有MMU) 消费电子 图像、音视频处理单片机小内存 小外存256byte 4kCortex-M3/M3 (没有MMU) 工业控制、IOTARM逻辑1.启动流程2.IMX6ULL时钟系统3.中断系统4.GPIO5.Timer PWM6.UART7.I2C8.SPI时序9.RGBLCD10.ADC11.USB12.SDIO二、学习驱动目标1. IMX6ULL平台移植Linux操作系统任务调度多任务协议栈网络、USB、CAN文件系统进程间通信设备管理2. 软硬件裁剪增加需要的功能删除冗余的功能3.外设驱动的适配字符设备驱动编写 #《Linux设备驱动开发详解》-宋宝华#三、开发板烧写LINUX系统1. 烧写工具2. 烧写程序Linux系统1.bootloaderUBOOT 一段加载引导系统启动的逻辑代码为加载执行内核做前期的准备初始化硬件设备、加载资源设置栈指针寄存器初始化DDR初始化其余外设2.Linux内核纯C语言编写的软件程序zImage(内核镜像)内存管理多任务管理进程间通信网络协议文件系统管理dtb设备树文件硬件平台资源信息3. rootfs文件系统用户层与内核层交互、对文件系统管理和操作所需文件uboot.imxzImage.dtbrootfs.tar.gzuboot.bin - unoot.imxvmlinux - Image - zImage - uImage硬件平台资源启动方式USBSD卡EMMCNANDSD卡系统移植性好1.上电启动加载0x0位置代码出场一段BotROM代码2.执行BotROM代码IMUX6ULL的RAM中执行芯片校验查看启动方式找到uboot.imx文件初始化DDR将uboot.bin迁移DDR中执行3.uboot执行代码3. 开发方式下载开源代码启动方式SD卡、EMMC、网络1.uboot-SD卡2.tftp协议从远端服务器下载zImage 和 .dtb文件到DDR3.通过bootz命令加载Linux系统4.nfs协议将Linux文件系统通过网络挂载到远端主机上启动流程1.SD卡启动2.开发板上电执行0x0位置代码查看启动方式到SD卡中找uboot.imx(uboot.bin DCDbiaotou :时钟寄存器配置DDR寄存器配置)将uboot.bin搬移到DDR中运行关闭看门狗、关闭dchche、初始化串口、初始化网口uboot自搬移高地址uboot进入人机交互倒计时等待用户输入用户没有输入则执行bootcmdbootcmdtftp下载zImage 80800000; tftp 下载.dtb 83000000bootzuboot-协议nfs协议挂载rootfsTFTP协议下载zImage .dtb内核剪裁cd linux-imx-rel_imx_4.1.15_2.1.0_ga_alientek/make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- distcleanmake ARCHarm CROSS_COMPILEarm-linux-gnueabihf- imx_alientek_emmc_defconfigmakeARCHarm CROSS_COMPILEarm-linux-gnueabihf-menuconfig//进入地图之后选择要启用的驱动实现内核剪裁//y CH341 zImage (包含CH341驱动) //量产 静态加载M CH341 ch341.ko(驱动模块加载Linux系统中) //调试阶段动态加载make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- all -j16distclean表示清除之前的编译内容imx_alientek_emmc_defconfig将该配置作为内核的.config配置menuconfig通过图形界面配置.configall -j16通过16核编译代码ARCHarm编译arm32位平台CROSS_COMPILEarm-linux-gnueabihf-设置编译工具链制作文件系统工具busyboxbuildroot *yacto驱动1.静态编译zImagedriver.c -指定目录 - Makefile(obj-y) - makekconfig()2.动态编译 .ko insmod(加载)obj-m driver.omake -C $(kerdir) M$(sell pwd) modules1.字符设备驱动1.cat /proc/devices设备号主设备号 次设备号主设备类型//cdev_alloccdev结构- devno(设备号)次设备编号-操作方法2.块设备驱动3.网络设备驱动