- 博客(184)
- 资源 (4)
- 收藏
- 关注
原创 【u-boot-2018.11】源码分析之vectors.S
arch/arm/lib/vectors.S#include <config.h>/* * A macro to allow insertion of an ARM exception vector either * for the non-boot0 case or by a boot0-header. *//* 宏,定义了异常向量表,用来插入boot的头部 */...
2019-10-02 17:21:56
1605
原创 【u-boot-2018.11】源码分析之crt0.S
arch/arm/lib/crt0.S:/*此文件处理U-Boot启动的与目标无关的阶段,其中需要C运行时环境。它的入口点是_main,并从目标的start.S文件跳转到它。_main执行顺序为:1.为调用board_init_f()设置初始环境。该环境只提供一个堆栈和一个存储GD(“全局数据”)结构的位置,两者都位于一些可用的RAM (SRAM、锁定的缓存……)中。在这种情况...
2019-10-02 16:56:23
1394
原创 【u-boot-2018.11】源码分析之sections.c
arch/arm/lib/sections.c:/*这两个符号在一个C文件中声明,因此链接器使用R_ARM_RELATIVE重定位,而不是在链接器文件中定义符号时使用的R_ARM_ABS32。仅使用R_ARM_RELATIVE重新定位可确保对符号的引用在重新定位之后和之前都是正确的。对于这些符号,我们需要一个0字节大小的类型,而编译器不允许定义C类型的对象“void”。编译器允许使用...
2019-10-02 12:19:25
324
原创 【u-boot-2018.11】make工具之conf
1. 概述conf的源码位于scripts/kconfig目录下。2. conf的编译u-boot配置过程执行make pangu_basic_defconfig V=1,对应于顶层Makefile中的%config目标:%config: scripts_basic outputmakefile FORCE $(Q)$(MAKE) $(build)=scripts/kconfi...
2019-09-17 22:48:24
3002
1
原创 【u-boot-2018.11】链接脚本分析
1. 链接脚本生成1.1 指定链接脚本模板文件在顶层Makefile中会根据设置指定链接脚本的模板文件:# If board code explicitly specified LDSCRIPT or CONFIG_SYS_LDSCRIPT, use# that (or fail if absent). Otherwise, search for a linker script ...
2019-09-02 22:16:14
1303
原创 【u-boot-2018.11】make工具之fixdep
1. 概述fixdep工具的源码位于scripts/basic/fixdep.c中,代码本身并不复杂,但其作用是什么?哪里调用?如何调用?请看下面一一道来。2. 哪里调用直接在u-boot源码目录下搜索:命令: grep -rnw fixdep . --exclude-dir=basic结果: ./scripts/Makefile.build:270: ...
2019-09-01 12:26:42
4822
3
原创 【u-boot-2018.11】make编译过程分析
在【u-boot-2018.11】make编译过程目标依赖分析中分析依赖关系时采用自顶向下的方法,从顶层目标开始到最原始的依赖。此处采用自下而上的方式,先从最原始的依赖开始,一步一步,执行命令生成目标。1.prepare系列的目标分析prepare系列的目标依赖关系如下:1.1 .config.config是在执行make pangu_basic_defconfig配置时生...
2019-08-26 22:47:57
3176
原创 【u-boot-2018.11】make配置过程分析
一、u-boot编译u-boot的编译分为两步:配置、编译。(1)第一步:配置,执行makepangu_basic_defconfig进行配置,生成.config文件(2)第二步:编译,执行make进行编译,生成u-boot.*。二、u-boot配置过程分析u-boot从u-boot-2014.10版本引入Kbuild系统以后,Makefile的管理和组织跟以前版本有了很大的...
2019-08-12 21:51:38
1140
原创 【u-boot-2018.11】make编译过程目标依赖分析
一、u-boot编译uboot的编译分为两步:配置、编译。(1)第一步:配置,执行makepangu_basic_defconfig进行配置,生成.config文件(2)第二步:编译,执行make进行编译,生成u-boot.*。二、u-boot编译过程目标依赖分析1. u-boot目标依赖关系图根据以上目标依赖关系图,为了分析方便,将整个目标依赖图分为三部分:_all...
2019-08-01 22:15:15
2554
1
转载 uboot添加对新板子的支持
转载地址:https://blog.csdn.net/q_z_r_s/article/details/80797999If the system board that you have is not listed, then you will needto port U-Boot to your hardware platform. To do this, follow thesestep...
2019-07-18 19:43:28
1051
转载 Makefile之几个常用函数(addprefix、addsuffix、if、wildcard、filter、call)
介绍几个常用的makefile函数addprefix. $(addprefix <prefix>, <name1 name2 ...>) 功能:把<prefix>加到name序列中的每一个元素前面。 result = $(addprefix %., c cpp)test: @echo $(result) 输出:%.c %.cpp...
2019-05-17 22:19:48
9784
原创 Makefile之$(CURDIR)
CURDIR是Makefile的内嵌变量,自动设置为当前目录测试:all:@echo $(CURDIR)在命令行make后就显示当前路径。
2019-05-17 22:09:57
13020
原创 printk()函数
内核模块中用于输出的函数是内核空间的printk()而不是用户空间的printf(),printk()的用法和printf()基本相似,但printk()可定义输出级别。printk()可作为一种最基本的内核调试手段。注:在Ubuntu中使用dmesg命令查看内核打印信息。...
2019-04-19 21:29:34
445
原创 Linux内核模块
1. Linux内核模块Linux本身是宏内核(单内核),但是又提供了模块这样一种机制,构成了Linux独有的模块特性。Linux内核模块的特点:(1)模块本身不被编译入内核镜像,从而控制了内核的大小。(2)模块一旦被加载,它就和内核中的其他部分完全一样。2. Linux内核模块操作指令(1)lsmod 显示系统中已加载的所有模块,实际就是读取并分析“/p...
2019-04-17 22:09:00
778
原创 驱动应该怎么学习
1. 驱动分类驱动可以分为三类:字符设备驱动、块设备驱动、网络设备驱动。2. 驱动与内核的关系(1)驱动是内核的一部分驱动已经成为内核中最庞大的部分;内核会直接以函数调用的方式调用驱动代码;驱动的动态安装和卸载都会“更改”内核。(2)驱动对内核的影响驱动程序崩溃有可能会导致内核崩溃;驱动的效率会影响内核的整体效率;驱动的漏洞会造成内核安装漏洞。(3)常见...
2019-04-15 20:55:15
1104
原创 IAR使用问题总结
1. 打开某台电脑的IAR后,再打开工程,发现编译工程时,每次所有的文件都要编译,而且有时候无法下载调试,刚开始没有注意这个现象,以为是软件的问题,后来发现是电脑的时间不是标准时间,更新时间后,IAR软件可以正常工作了。...
2019-02-20 21:51:03
1326
原创 uboot顶层目录(根目录)下的config.mk解析
该文件在主Makefile中的第185行被包含,如下:# load other configurationinclude $(TOPDIR)/config.mk1. 编译工具定义(94 ~ 107行)## Include the make variables (CC, etc...)#AS = $(CROSS_COMPILE)asLD = $(CROSS_COMPILE)...
2018-12-01 16:53:49
1139
原创 uboot主Makefile分析
1. VERSION(24 ~ 29行)VERSION = 1PATCHLEVEL = 3SUBLEVEL = 4EXTRAVERSION =U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)VERSION_FILE = $(obj)include/version_autogenerated.h...
2018-12-01 14:55:26
575
原创 Makefile中echo和@echo的区别
echo:会在shell中显示echo这条命令和这条命令的输出结果@echo:不会在shell中显示echo这条命令,但是会显示命令的输出结果例如:echo_test: echo "hello world"echo_test_with_address: @echo "hello world"echo_test的输出结果为:echo_test_with_addres...
2018-12-01 14:31:52
30476
原创 uboot配置编译
0. 准备交叉编译工具链:arm-2009q3,位于/home/linuxwei/toolchain目录下uboot:九鼎提供的uboot,位于/home/linuxwei/uboot/uboot_jiuding目录下1. 配置进入九鼎提供的uboot的根目录,执行make x210_sd_config,当出现时表示配置成功。2. 编译第1步:修改交叉编译工具链前缀打开...
2018-11-25 22:02:28
659
原创 uboot使用
掌握uboot的使用其实就是掌握uboot的命令和环境变量1. 常用命令(1)printenv/print:打印环境变量(2)setenv/set:设置环境变量(3)saveenv/save:保存环境变量(4)ping:网络测试注:uboot的IP地址(环境变量ipaddr)和主机的IP地址必须处于同一网段。(5)tftp:网络下载注:该指令常用于从主机下载内核镜像...
2018-11-25 10:33:50
1870
原创 Keil MDK v5.25使用JLink V9下载程序时报错
问题描述:使用Keil MDK v5.24及以下版本时,向STM32F103VCT6中下载程序时没有报错,但是在安装最新的Keil MDK v5.25之后,下载程序时报错,报错的信息大概的意思是盗版。解决方案:将原来安装的低版本的 Keil安装目录/ARM/Segger 目录下的内容复制到 Keil MDK v5.25安装目录/ARM/Segger 目录下,重新打开Keil即可解决。 ...
2018-11-23 15:54:19
2748
原创 uboot简介
1. 嵌入式系统部署uboot部署在Flash上(启动设备)、OS部署在Flash上(硬盘)、内存掉电时无作用、CPU掉电时不工作2. 嵌入式系统启动过程系统上电后先执行uboot,uboot负责初始化DDR、初始化Flash,然后将OS从Flash读取到DDR中,最后启动OS。(OS启动后,uboot就没用了)3. uboot的作用(1)uboot的主要作用是用来启动操作系统...
2018-11-23 14:53:53
715
原创 rootfs主要文件介绍
一、/linuxrc1. /linuxrc是一个可执行的应用程序(1)/linuxrc是应用层的,和内核源码一点关系都没有。(2)/linuxrc在开发板当前系统下是可执行的。因此在ARM SoC的linux系统下,这个应用程序就是arm-linux-gcc编译链接的;如果是在PC机linux系统下,那么这个程序就是用gcc编译链接的。(3)/linuxrc如果是静态编译链接的,那...
2018-11-15 18:08:54
6662
原创 Linux杂谈
1. make installmake install在所有的linux的软件中的作用是安装软件。在传统的linux系统中,安装软件时都是选择源代码方式安装,然后配置、编译、安装。make install的目的是就是将编译生成的可执行文件及其依赖的库文件、配置文件、头文件安装到当前系统中指定的目录中(一般可以指定,如果不指定会有默认目录。)...
2018-11-10 17:50:53
209
原创 busybox移植
系统:Ubuntu 16.04busubox:1.29.3(busybox版本差异不大,因此新旧版本无所谓)下载地址:www.busybox.net 1. 修改MakefileARCH ?= armCROSS_COMPILE ?= /home/linuxwei/toolchain/arm-2009q3/bin/arm-none-linux-gnueabi-2. make...
2018-11-10 17:38:51
1026
原创 面试题(嵌入式经典)
1. 用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)。#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL2. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。#define MIN(A,B) ((A) <= (B) (A) : (B)) 3. 预处理器标识#error的目的是什么?...
2018-11-07 09:13:22
2844
原创 面试题(Linux应用与网络)
1. linux目录结构2. linux常用命令3. vi的3种工作模式:命令行模式、插入模式和底行模式4. 嵌入式系统:以应用为中心,以计算机技术为基础,软件硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。5. ARM的7种处理器模式:用户模式、快速中断模式、外部中断模式、管理模式、数据访问终止模式、系统模式。6. Bootloader:在...
2018-11-06 22:06:00
2457
转载 C语言中的setjmp和longjmp
转载地址:http://www.cnblogs.com/hazir/p/c_setjmp_longjmp.html在 C 语言中,我们不能使用 goto 语句来跳转到另一个函数中的某个 label 处;但提供了两个函数——setjmp 和 longjmp来完成这种类型的分支跳转。后面我们会看到这两个函数在处理异常上面的非常有用。setjmp 和 longjmp 使用方法我们都知道要想在...
2018-11-05 14:06:06
758
原创 根文件系统的原理
根文件系统概述1.为什么需要根文件系统(1)init进程的应用程序在根文件系统上(2)根文件系统提供了根目录/(3)内核启动后的应用层配置(/etc)在根文件系统上,可以这么认为:发行版=内核+rootfs(4)shell命令程序在根文件系统上,例如ls、cd等总结:一套linux体系,只有内核本身是不能工作的,必须要rootfs(/etc下的配置文件、/bin等目录下的s...
2018-10-30 14:22:58
808
原创 linux内核启动过程分析
准备工作 Makefile分析kernel的Makefile写法和规则与uboot的Makefile是一样的,甚至Makefile中的很多内容都是一样的。kernel的Makefile比uboot的Makefile要复杂,在这里不需要一行一行的详细分析,只需要关注在配置编译过程需要用到的地方,其他的地方可以不管。(1)Makefile开始定义了kernel的版本号,这个版本号很重要...
2018-10-30 09:36:45
6609
3
原创 linux内核配置原理
linux内核配置的关键是得到.config文件。(1).config以 . 开头,是一个隐藏文件,平时看不到,需要使用ls -a查看(2)默认情况下(或执行make distclean以后)是没有.config文件的,配置的两步就是为了得到内容合适的.config文件。(3).config文件是linux内核在编译过程中很重要的一个文件,其作用类似于uboot中的include/co...
2018-10-25 15:14:42
998
原创 linux内核配置、编译
环境系统:Ubuntu 16.04内核:Linux 2.6.35.7 配置和编译1.修改Makefile(1)修改交叉编译工具链CROSS_COMPILE ?= /home/linuxwei/toolchain/arm-2009q3/bin/arm-none-linux-gnueabi-(2)修改架构ARCH ?= arm2.配置第一步:执行mak...
2018-10-24 21:14:14
251
原创 linux内核源码目录结构
linux内核源码目录结构如下所示:(1)KbuildKbuild是Kernel build的意思,就是内核编译的意思,这个文件就是linux内核特有的内核编译体系需要用到的文件。(2)Makefile这个是linux内核的总Makefile,整个内核工程是用这个Makefile来管理的。(3)mk这个文件是九鼎在移植时自己添加的,不是linux内核本身的东西。九鼎添加...
2018-10-23 10:31:52
7079
原创 话说linux内核
内核和驱动、内核和应用程序、内核和文件系统的关系内核和驱动的关系:(1)驱动属于内核的一部分(2)驱动就是内核中的硬件设备管理模块、(3)驱动工作在内核态(4)驱动程序故障可能会导致整个内核崩溃(5)驱动程序漏洞会使内核不安全内核的应用程序的关系:(1)应用程序不属于内核,而是在内核之上的(2)应用程序工作在用户态,是受限制的(3)应用程序故障不会导致内核崩...
2018-10-22 20:43:08
219
原创 嵌入式Linux下实现U盘、SD卡自动挂载功能
在嵌入式Linux中我们经常用到U盘、SD卡等存储设备,每次手动挂载或卸载非常麻烦,因此可以采用以下方法实现它们的自动挂载或卸载:1、 首先在 /etc/init.d/rcS 中加入以下语句echo /sbin/mdev > /proc/sys/kernel/hotplug2、在 /etc 目录下建立 medv.conf 的文件,并输入以下内容sd[a-z][0-9] ...
2018-10-19 13:47:55
4373
3
原创 Qt在linux系统中执行shell命令
在linux系统下,Qt执行shell命令的方式有3种:(1)QProcess:execute("ls");(2)system("ls");(3)QProcess *process = new QProcess(); process->start("ls");注1:以上3中方法都可以,但是前两种会阻塞进程,直到ls结束,而第三种不会阻塞进程,可以多任务运行。注2:当命令中...
2018-10-12 12:32:15
10733
5
转载 终端的CTRL+S 解说
在很多类Unix 的系统上,Ctrl-S 都有特殊的含义:它会“冻结”终端(它曾经被用来暂停快速滚动)。因为“保存”一般也是用这个快捷键,所以经常会有人不假思索地按下这个快捷键,结果大多数人都会被搞糊涂(我也经常犯这个错误)。解冻终端是用Ctrl-Q,所以如果你忽然发觉终端看起来被冻结了,试一下Ctrl-Q,看能不能释放它。...
2018-10-12 09:48:58
4384
转载 Ubuntu16.04 64位系统使用32位交叉编译器的问题
转载地址:https://blog.csdn.net/ghty520/article/details/79251683 在ubuntu16.04的64位系统上安装32位交叉编译工具链,建好软连接后,发现无法使用,显示No such file or directory。解决方法:sudo apt-get install libc6:i386安装完成后,测试可用。后来有发现其它解决方式...
2018-10-02 20:05:23
3187
1
原创 uboot的硬件驱动
uboot与linux驱动1.uboot本身是裸机程序(1)在裸机中本来是没有驱动概念的(狭义的驱动概念是指在操作系统中用来具体操控硬件的那部分代码叫驱动)。(2)裸机程序是直接操控硬件的,操作系统必须通过驱动来操控硬件。这两个有什么区别?本质区别就是分层。2.uboot虚拟地址对硬件操作的影响(1)操作系统(指的是linux)下MMU肯定是开启的,也就是说linux驱动中使用...
2018-09-21 17:24:04
1543
uboot顶层config.mk分析
2018-09-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅