ARM S5PV210 朱有鹏
文章平均质量分 84
使用朱友鹏老师的九鼎科技开发板
滨边美波她男友
范进中举
展开
-
ARM buildroot 的引入
(1) tslib_x210_qtopia.tgz 是用来支持 QT 的触摸屏操作的应用层库。(2) xboot 和 uboot 是 X210 支持的 2 个 bootloader 源代码。kernel 文件夹中是内核源代码,buildroot 文件夹是用来构建根文件系统的文件夹。tools 里是一些有用工具。(3) mk 脚本是用来管理和编译整个 bsp 的。(1)之前自己从零开始构建根文件系统,一路下来事情还挺多,步骤比较麻烦。原创 2023-04-24 23:21:20 · 1300 阅读 · 2 评论 -
ARM busybox 的移植实战2
文件,是 linux 的运行时配置文件中最重要的一个,其他的一些配置都是由这个文件引出来的。这个文件可以很复杂,也可以很简单,里面可以有很多的配置项。?(1) mdev 是 udev 的嵌入式简化版本,udev/mdev 是用来配合 linux 驱动工作的一个应用层的软件,udev/mdev 的工作就是配合 linux 驱动生成相应的 /dev 目录下的设备文件。(2) 因为这个问题涉及到驱动,因此详细讲解要等到驱动部分。这里我们只是通过一些直观的现象来初步理解 udev/mdev 的工作效果。原创 2023-04-23 22:37:47 · 1272 阅读 · 0 评论 -
ARM busybox 的移植实战1
先逐步构建 “文件夹形式”的根文件系统,然后制作烧录镜像。(1)(2) 我们先从空文件夹开始,逐步向其中添加一些 rootfs 中必备的东西,然后做一步就用 nfs 方式去挂载启动,观察启动后的现象,并且理论上去分析原因。原创 2023-04-20 22:37:07 · 1453 阅读 · 0 评论 -
ARM rootfs、linuxrc 的简单制作
(1) nfs 方式启动,相当于开发板上的内核远程挂载到主机上的rootfs。(2) nfs 方式启动,不用制作 rootfs 镜像。(3) nfs 方式不适合真正的产品,一般作为产品开发阶段调试使用。(1)/linuxrc 是应用层的程序,和内核源码一点关系都没有。(2) /linuxrc 在开发板当前内核系统下是可执行的。因此在 ARM SoC 的 linux 系统下,这个应用程序就是用 arm-linux-gcc 编译链接的;原创 2023-04-18 13:40:27 · 877 阅读 · 0 评论 -
ARM 制作简易的根文件系统
(1)镜像文件形式的根文件系统,主要目的是用来烧录到块设备上,设备上的内核启动后,去挂载它。镜像文件形式的根文件系统,是由文件夹形式的根文件系统,使用专用的镜像制作工具制作而成的。(2) 最初在开发主机中随便 mkdir 创建了一个空文件夹,然后向其中添加一些必要的文件(包括 etc 目录下的运行时配置文件、/bin 等目录下的可执行程序、/lib 目录下的库文件等···)后就形成了一个文件夹形式的 rootfs。然后。原创 2023-04-15 00:01:59 · 934 阅读 · 0 评论 -
ARM kernel 内核的移植 - 从三星官方内核开始移植
(1) 分析:问题究竟是怎么被解决的?涉及哪几个方面。根本原因在于 CONFIG_MFD_MAX8698 这个配置宏。这个配置宏决定了很多东西。第一:这个配置宏 决定了 drivers 目录下的 max8698 对应的驱动程序源代码是否被编译。第二:这个配置宏 决定了 kernel 启动过程中是否会调用一些 max8698 的相关的代码。(2) 总结:kernel 是高度模块化和可配置化的,所以在内核中做任何事情(添加一个模块、更改一个模块、去掉一个模块)都必须按照内核设定的方案和流程来走。原创 2023-04-13 22:53:08 · 1319 阅读 · 0 评论 -
ARM Linux 内核启动2 ——C语言阶段
(1) 从名字看,这个函数是 CPU 架构相关的一些创建过程。(2) 实际上这个函数是用来确定我们当前内核的机器(arch、machine)的。我们的 linux 内核会支持一种 CPU 的运行,“CPU+开发板” 就确定了一个硬件平台,然后我们当前配置的内核 就在这个平台上可以运行。之前说过的机器码,就是给这个硬件平台一个固定的编码,以表征这个平台。(3) 当前内核支持的机器码以及硬件平台相关的一些定义都在这个函数中处理。(1) 进程和线程。简单来理解,一个运行的程序就是一个进程。原创 2023-04-09 22:37:12 · 1059 阅读 · 0 评论 -
ARM Linux 内核启动1 —— 汇编阶段
(1) kernel 的 Makefile 写法和规则等,和 uboot 的 Makefile 是一样的,甚至 Makefile 中的很多内容都是一样的。(2) kernel 的 Makefile 比 uboot 的 Makefile 要复杂,这里我们并不会一行一行的详细分析。(3) Makefile 中只有一些值得关注的会强调一下,其他不强调的地方暂时可以不管。(4) Makefile 中刚开始,定义了 kernel 的内核版本号。这个版本号挺重要(在模块化驱动安装时会需要用到),要注意会查,会改。原创 2023-04-08 17:40:58 · 1176 阅读 · 0 评论 -
ARM uboot 启动 Linux 内核
进入 uboot 的 sd_fusing 目录,执行命令烧写 uboot :./sd_fusing.sh /dev/sdb。将 Linux kernel 拷贝到 30008000。原创 2023-04-06 19:07:14 · 1078 阅读 · 0 评论 -
ARM Linux 内核的配置和编译原理
(3) 当我们每次退出 make menuconfig 时,menuconfig 机制会首先检查我们有没有更改某些配置项的值,如果我们本次没有更改过任意一个配置项目的值,那直接退出;如果我们有改动配置项的值,则会提示我们是否保存。原创 2023-04-05 23:16:29 · 1582 阅读 · 0 评论 -
ARM 话说 Linux 内核
(1) 因为 linux 内核很庞大,代码量很大、东西很多,如果设计时完全设计成一体(各个文件、各个函数之间紧耦合),复杂度超出了人所能理解的范围。所以模块化设计也是一种必要。(2) 模块化设计就是,内核中各个功能模块在代码上是彼此独立的;譬如说,调度系统和内存管理系统之间,并没有全局变量的互相引用,甚至函数互相调用也很少,就算有 也是遵循一个接口规范的。模块化设计的目的,就是实现功能模块的松耦合。原创 2023-04-05 23:13:59 · 711 阅读 · 0 评论 -
ARM uboot 的移植6 -从 uboot 官方标准uboot 开始移植
(1) 2015.11 月初之前购买的 X210 开发板都属于老版本,型号是;之后购买的开发板都是新版本的,型号是。(2) 两个开发板主要电路是完全一样的,不同主要有 3 点:一个是把拨码开关换成了短路帽;另一个是 LCD 分辨率从升级成;第三个是触摸屏芯片型号换了。原创 2023-04-05 23:09:42 · 488 阅读 · 0 评论 -
Linux 格式化磁盘,制作文件系统 => 报错: dev/sdb is NOT identified.
经过实践,发现格式化 SD 卡可以解决该问题;或者使用命令发现 sdb 块设备的文件类型不是 b(块设备),此时删除,然后重新插入 SD 卡,也能解决问题。原创 2023-04-05 22:22:09 · 1486 阅读 · 0 评论 -
ARM 自己实现一个 shell 解释器
添加 cmd_parser 和 cmd_exec。实现简单的 cmd_parser 和 对应的 cmd_exec。// 命令解析和命令执行相关的函数 # include "shell.h" # include "stdio.h" char g_cmdset [ CMD_NUM ] [ MAX_LINE_LENGTH ];// 初始化命令列表 void init_cmd_set(void) {// 先全部清零 strcpy(g_cmdset [ 0 ] , led);原创 2023-04-05 22:09:29 · 474 阅读 · 0 评论 -
ARM 触摸屏 TouchScreen
(1) 耐久性 电容式触摸屏不容易坏,电阻式触摸屏易坏(2) 抗干扰性 电容式触摸屏差一些,电阻式触摸屏要好一些(3) 精准度 电容式触摸屏差一些,电阻式触摸屏好一些(4) 用户体验 电容式触摸屏要好一些,电阻式触摸屏要差一些(5) 价格 电容式触摸屏贵一些,电阻式触摸屏便宜很多。原创 2023-04-01 15:38:22 · 965 阅读 · 0 评论 -
ARM LCD 编程实战
一、LCD编程实战1 - LCD 控制器初始化参考代码 lcd_init 函数详解(1) 要想 LCD 工作,必须给 LCD 屏幕和显存之间建立一个映射(映射是在 CPU 初始化 LCD 控制器来完成的)。本部分就是在完成这个过程(这也是 LCD 显示的 2 个阶段的第一阶段,第二阶段中我们只需要给显存中丢入相应的数据,LCD 屏幕就会自动显示相应内容)。1. 配置 GPIO 初始化,复用为 LCD 引脚。2. 打开 LCD 屏幕的背光.3. 显示路径的选择,FIMD 控制器使用原创 2023-03-30 00:40:15 · 848 阅读 · 0 评论 -
ARM uboot 的移植5 -从 uboot 官方标准uboot 开始移植
(1) 测试环境变量是否可以保存。通过开机 set 设置环境变量,然后 save,然后关机后重启来测试环境变量的保存是否成功。(2) 我们的环境变量究竟保存到哪里去了?这个就要去分析代码中的分区表。(3) 环境变量应该被放在哪里?虽然无法确定 ENV 一定要放在哪里,但是有一些地方肯定是不能放的,否则将来会出问题。原则是:同一个 SD 卡扇区只能放一种东西,不能叠加,否则就会被覆盖掉。原创 2023-03-19 01:39:26 · 716 阅读 · 0 评论 -
ARM uboot 的移植4 -从 uboot 官方标准uboot 开始移植
移植成功。(1) 在 uboot2013.10 中和 uboot1.3.4 中的设计有所不同。在 uboot1.3.4 中,这个东西是分散定义在各个配置头文件当中的。但是在 uboot2013.10 中,我们把MACH_TYPE集中定义在一个文件arch/arm/include/asm/mach-types.h 中了。(2) 集中定义其实是 uboot 从 linux 内核中学来的。在 linux kernel 中,MACH_TYPE就是在文件中集中定义的。集中定义的好处是方便查阅,不容易定义重复。原创 2023-03-18 00:15:41 · 538 阅读 · 0 评论 -
ARM ADC转换编程实践
开启 start by read 模式,第一次先读一次丢掉,这次读就能开启下一次 AD 转换,然后以后就可以不停的读取 AD 值了。原创 2023-03-12 11:43:17 · 543 阅读 · 0 评论 -
ARM uboot 的移植4 -从 uboot 官方标准uboot开始移植
(1)DDR配置参数,从三星版本的中复制到s5p_goni.h中。1、(2)s5pc110.h中进行修整。原创 2023-03-11 14:26:11 · 2074 阅读 · 0 评论 -
ARM uboot 的移植3 -从 uboot 官方标准uboot开始移植
一、选择合适的官方原版 uboot1、官方原版 uboot 的版本(1) 版本号。刚开始是 1.3.4 样式,后来变成 2009.08 样式。(2) 新版和旧版的差别。uboot 的架构很早就定下来了,然后里面普遍公用的东西(common 目录下、drivers 目录下、fs 目录下等···)在各个版本之间几乎是完全一样的。差别最大的是 board 和 cpu 目录,这两个目录正是单板(开发板)相关的。越新的 uboot 版本支持越多的开发板(CPU),所以越新的 uboot 越庞大。(3) 并不原创 2023-03-08 00:19:15 · 2063 阅读 · 2 评论 -
ARM 学习 DM9000 网卡原理与基地址设置
一、网卡也是属于类内存总线的设备,类内存总线的设备有地址总线和数据总线,先来看下DM9000的管脚:从上面可以看出,DM9000 的地址总线就一根,它不像 CS8900 那样,地址总线和数据总线都齐全。而这里只有一根地址线(CMD),16 根数据线,所以可以确定位宽为 16 位,而地址线为什么只有一根,这是 DM9000 决定的。看手册可以知道,CPU 总线只访问它的两个地址:CMD 管脚为 0 时,数据线送的是 DM9000 的寄存器地址,CMD 管脚为 1 时,数据线上送的是 16 位的寄存器数转载 2023-03-05 16:22:46 · 885 阅读 · 0 评论 -
ARM uboot 的移植2-从三星官方 uboot 开始移植
一、inand 驱动问题的解决1、先从现象出发定位问题(1) 解决问题的第一步,是定位问题。所谓定位问题,就是找到源代码当中导致这个问题的那一句或者那几句代码。有时候解决这个问题需要修改的代码和直接导致这个问题的代码是不同的。我们这里说的定位问题指的是,定位到出问题的代码处,也就是运行了这一句代码时发生了这个错误。(2) 定位了问题之后,实际修改程序解决问题不一定改的是这一句代码。但是肯定和这一句代码有关联,我们要通过自己分析来找到这种关联,从而从定位的错误点找到真正需要修改的点,然后去修改他。(原创 2023-03-05 15:49:01 · 602 阅读 · 0 评论 -
ARM uboot 的移植0-从三星官方 uboot 开始移植的准备工作
一、移植前的准备工作1、三星移植过的uboot源代码准备(1) 三星对于 S5PV210 的官方开发板为 SMDKV210,对应的移植过的 uboot 是:三星官方为210移植过的uboot和kernel/android_uboot_smdkv210.tar.bz2。(2) 这个源代码网上是下载不到的,三星官方是不会把这些东西放在官网上下载的。这些东西都是随着官方的开发板一起流出的。2、代码阅读工具的准备(1) 移植的时候最重要的工作就是看代码、改代码,然后编译运行测试。(2) 编译代码必原创 2023-03-05 00:01:21 · 478 阅读 · 0 评论 -
ARM uboot 的移植1-从三星官方 uboot 开始移植
一、移植初体验1、直接编译三星移植版 uboot 尝试运行(1) 复制到 linux 的源生目录下,然后解压开。(2) 检查 Makefile 中的交叉编译工具链。(3) 配置时使用:make smdkv210single_config,对应 include/configs/smdkv210single.h 头文件。(4) 配置完成后直接 make 编译,编译完成后就进入烧录步骤。make distcleanmake smdkv210single_configmake -j8原创 2023-03-04 16:32:11 · 546 阅读 · 0 评论 -
ARM uboot 源码分析9 - uboot的硬件驱动部分
一、uboot 与 linux 驱动1、uboot 本身是裸机程序(1) 裸机本来是没有驱动的概念的(狭义的驱动的概念就是,操作系统中用来具体操控硬件的那部分代码叫驱动)(2) 裸机程序中是直接操控硬件的,操作系统中必须通过驱动来操控硬件。这两个有什么区别?本质区别就是分层。2、uboot 的虚拟地址对硬件操作的影响(1) 操作系统(指的是 linux)下 MMU 肯定是开启的,也就是说,linux 驱动中肯定都使用的是虚拟地址。而纯裸机程序中,根本不会开 MMU,全部使用的是物理地址。这是裸机原创 2023-03-04 01:09:27 · 813 阅读 · 0 评论 -
ARM uboot 源码分析8 - uboot的环境变量
一、uboot 的环境变量基础1、环境变量的作用(1) 让我们可以不用修改 uboot 的源代码,而是通过修改环境变量,来影响 uboot 运行时的一些数据和特性。譬如说,通过修改 bootdelay 环境变量,就可以更改系统开机自动启动时倒数的秒数。2、环境变量的优先级(1) uboot 代码当中有一个值,环境变量中也有一个值。uboot 程序实际运行时规则是:如果环境变量为空,则使用代码中的值;如果环境变量不为空,则优先使用环境变量对应的值。(2) 譬如 machid(机器码)。uboot原创 2023-02-25 13:37:42 · 722 阅读 · 0 评论 -
ARM uboot 源码分析7 - uboot的命令体系
一、uboot 命令体系基础1、使用 uboot 命令(1) uboot 启动后进入命令行环境下,在此输入命令按回车结束,uboot 会收取这个命令然后解析,然后执行。2、uboot 命令体系实现代码在哪里(1) uboot 命令体系的实现代码在 uboot/common/cmd_xxx.c 中。有若干个 .c 文件和命令体系有关。(还有 command.c main.c 也是和命令有关的)3、每个命令对应一个函数(1) 每一个 uboot 的命令背后都对应一个函数。这就是 uboot原创 2023-02-24 19:42:10 · 751 阅读 · 0 评论 -
ARM uboot 源码分析6 - uboot如何启动内核
一、uboot 和内核到底是什么1、uboot 是一个裸机程序(1) uboot 的本质就是一个复杂点的裸机程序。和我们在 ARM 裸机全集中学习的每一个裸机程序并没有本质区别。(2) ARM 裸机第十六部分写了个简单的 shell,这东西其实就是个mini 型的 uboot。2、内核本身也是一个"裸机程序"(1) 操作系统内核本身就是一个裸机程序,和 uboot、和其他裸机程序并没有本质区别。 正是内核运行起来了之后,才有了称为操作系统的环境,操作系统负责管理所有计算机资源。(2) 区别就原创 2023-02-24 00:13:58 · 1916 阅读 · 0 评论 -
Ubuntu 14.04.1 配置联网、设置 tftp 服务器
配置联网的操作,请参考博文:https://blog.csdn.net/weixin_42109053/article/details/128758168一、设置 tftp 服务器第 1 步:安装 tftp安装 tftp 所需的软件。首先需要安装 tftp-hpa,tftpd-hpa,前者是客户端,后者是服务程序, 在终端下输入 sudo apt-get install tftp-hpa tftpd-hpa,安装 tftp-hpa 和 tftpd-hpa。sudo apt-get install t原创 2023-01-25 00:14:10 · 1118 阅读 · 0 评论 -
ARM uboot 源码分析5 -启动第二阶段
一、start_armboot 解析61、console_init_f(1) console_init_f 是 console(控制台)的第一阶段初始化。_f 表示是第一阶段初始化,_r 表示第二阶段初始化。有时候初始化函数不能一次一起完成,中间必须要夹杂一些代码,因此将完整的一个模块的初始化分成了 2 个阶段。(我们的 uboot 中 start_armboot 的 826 行进行了 console_init_r 的初始化)(2) console_init_f 在 uboot/common原创 2023-02-17 22:07:50 · 1044 阅读 · 0 评论 -
ARM uboot 源码分析4 -启动第二阶段
一、start_armboot 函数简介1、一个很长的函数(1) 这个函数在 uboot/lib_arm/board.c 的第 444 行开始到 908 行结束。(2) 450 行还不是全部,因为里面还调用了别的函数。(3)为什么这么长的函数,怎么不分成两三个函数?主要因为这个函数整个构成了 uboot 启动的第二阶段。2、一个函数组成 uboot 第二阶段3、宏观分析:uboot 第二阶段应该做什么(1) 概括来讲,uboot 第一阶段主要就是初始化了 SoC 内部的一些部件(譬如看门原创 2023-02-13 23:31:08 · 587 阅读 · 0 评论 -
ARM MMU 详解
一、MMU 的产生许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以 K 为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当时的程序。但随着图形界面的兴起,还有用户需求的不断增大,应用程序的规模也随之膨胀起来,终于一个难题出现在程序员的面前,那就是应用程序太大以至于内存容纳不下该程序,通常解决的办法是把程序分割成许多称为覆盖块(overlay)的片段。覆盖块 0 首先运行,结束时他将调用另一个覆盖块。虽然覆盖块的交换是由 OS 完转载 2023-02-12 18:46:00 · 775 阅读 · 0 评论 -
ARM uboot源码分析3-启动第一阶段
一、start.S 解析7总结回顾:lowlevel_init.S 中总共做了哪些事情:检查复位状态、IO 恢复、关看门狗、开发板供电锁存、时钟初始化、DDR 初始化、串口初始化并打印 ‘O’、tzpc 初始化、打印 ‘K’。其中值得关注的:关看门狗、开发板供电锁存、时钟初始化、DDR初始化、打印"OK"。1、再次设置栈(DDR 中的栈)(1) 再次开发板供电锁存。第一,做 2 次供电锁存是不会错的;第二,做 2 次则第 2 次无意义;做代码移植时有一个古怪谨慎保守策略:就是尽量添加代码而不原创 2023-02-12 00:13:50 · 714 阅读 · 0 评论 -
ARM uboot源码分析2-启动第一阶段
一、start.S 解析5注释的中文含义:当我们已经在 RAM 中运行时,我们不需要重新定位 U-Boot。实际上,在 U-Boot 在 RAM 中运行之前,必须配置内存控制器。1、判断当前代码执行位置(1) lowlevel_init.S 的 110-115 行。(2) 这几行代码的作用,就是判定当前代码执行的位置在芯片内部 SRAM 中还是在 DDR 内存中。为什么要做这个判定?原因1:BL1(uboot 的前一部分)在 SRAM 中有一份,在 DDR 中也会有一份(从 SRAM 中c原创 2023-02-10 18:52:02 · 930 阅读 · 0 评论 -
ARM uboot源码分析1-启动第一阶段
00原创 2023-02-09 00:21:21 · 367 阅读 · 0 评论 -
ARM uboot主Makefile 分析、uboot配置过程详解、uboot链接脚本
一、uboot 主Makefile分析11、uboot version 确定(Makefile 的 24-29 行)(1) uboot 的版本号分 3 个级别:VERSION:主板本号PATCHLEVEL:次版本号SUBLEVEL:再次版本号EXTRAVERSION : 另外附加的版本信息这4个用 . 分隔开,共同构成了最终的版本号。(2) Makefile 中版本号最终生成了一个变量 U_BOOT_VERSION,这个变量记录了 Makefile 中配置的版本号。(3) incl原创 2023-01-30 00:03:02 · 867 阅读 · 2 评论 -
ARM uboot 的源码目录分析
一、uboot的源码目录分析11、九鼎官方 uboot 和三星原版 uboot 对比(1) 以九鼎官方的 uboot 为蓝本来学习的,以三星官方的这份为对照。(2) 不同版本的 uboot 或者同一版本不同人移植的 uboot,可能目录结构和文件内容都有所不同。将来大家懂了后也可以自己根据需要去添加/删除/更改目录结构。(3) 九鼎在以三星的 uboot 为原材料进行移植时,把三星版本的 uboot 中很多不必要的文件夹、文件给删除掉了。这个删除把很多完全用不到的文件清除出去,减少了整体的文件数量,原创 2023-01-28 09:07:42 · 448 阅读 · 0 评论 -
ARM X210 官方 uboot 配置编译实践
一、X210官方uboot配置编译实践11. 找到官方移植好的 uboot(BSP 概念)(1) 源头的源代码是 uboot 官网下载的。这个下载的源代码可能没有你当前使用的开发板的移植,甚至找不到当前开发板使用的 SoC 对应的移植版本。(2) SoC 厂商在推出一款 SoC 后,厂商的工程师会去 uboot 官网下载一个 uboot,根据自己的 SoC 进行第一步的移植,移植的目标是厂商推出的开发板。(譬如三星的 S5PV210 芯片厂商出的开发板就叫 SMDKV210 ).所以三星的工程师移植的原创 2023-01-27 02:58:13 · 702 阅读 · 0 评论 -
ARM Makefile 基础
一、Makefile 的作用和意义(1) 工程项目中 c 文件太多管理不方便,因此用 Makefile 来做项目管理,方便编译链接过程。(2) uboot 和 linux kernel本质上都是 C 语言的项目,都由很多个文件组成,因此都需要通过 Makefile 来管理。所以要分析 uboot 必须对 Makefile 有所了解。二、目标、依赖、命令(1) 目标就是我们要去 make xxx 的那个 xxx,就是我们最终要生成的东西。(2) 依赖是用来生成目录的原材料。(3) 命令就是加工方原创 2023-01-27 01:59:36 · 864 阅读 · 0 评论