
linux
文章平均质量分 65
Lamar Davis
Hello world, I'm stupid and I'm a SB.
展开
-
设备树中那些节点会被转换为内核里的platform_device
设备树中的节点有些能被转换为内核里的platform_device,有些不能:A. 根节点下含有compatile属性的子节点,会转换为platform_device;B. 含有特定compatile属性的节点的子节点,会转换为platform_device,如果一个节点的compatile属性,它的值是这4者之一:“simple-bus”,“simple-mfd”,“isa”,“arm,amba-bus”, 那么它的子结点(需含compatile属性)也可以转换为platform_device转载 2021-04-14 20:47:04 · 423 阅读 · 0 评论 -
shell中的变量和Makefile中的变量
一、Makefile中引用shell中的变量test.sh#!/bin/bashset -eexport DIR=/home/yuyin.weimake printMakefileprint: echo $(DIR)执行test.sh,结果如下:echo /home/yuyin.wei/home/yuyin.wei如果此时Makefile中使用echo $$(DIR),反而会出错,如下:echo $(DIR)/bin/sh: DIR原创 2021-04-13 14:32:57 · 863 阅读 · 0 评论 -
linux I2C驱动
I2C驱动分为I2C适配器驱动和I2C设备驱动,I2C适配器驱动芯片厂商已经帮我们实现好了,I2C设备驱动需要用户自己编写。下面我们主要就这两个方面进行分析。另外这里举例是用NXP的imx6ull芯片。I2C适配器驱动linux启动最先运行的I2C驱动相关函数是i2c_init(),这个函数是linux内核实现的,而不是厂商实现的,位于drivers\i2c\i2c-core.c文件第1879行:static int __init i2c_init(void){ int retval;原创 2021-01-18 14:46:33 · 575 阅读 · 0 评论 -
linux驱动 阻塞IO 等待队列 等待队列入口
阻塞IO主要有两种方式,等待队列,等待队列头一、等待队列原创 2020-12-14 15:13:28 · 421 阅读 · 0 评论 -
linux设备树中的#address-cells #size-cells
用于描述子节点的地址信息,即reg属性中,地址信息占几个uint32,地址长度占几个uint32,单位为uint32(4字节)注意,这里是描述子节点的地址信息,而不是本节点的地址信息原创 2020-11-28 22:40:21 · 2640 阅读 · 0 评论 -
arm中的B指令
参考:http://blog.chinaunix.net/uid-30311790-id-5755862.html一、B指令是绝对跳转还是相对跳转?B指令是相对跳转指令,是根据当前PC寄存器的值加上偏移来实现跳转的,所以它和代码在内存中的位置无关。但是我们在查看汇编文件的时候,经常会有种错觉,它好像是按绝对地址进行跳转的,因为B指令的形式是 “B Label",即跳转到Label处进行执行,Label这个标签明显是绝对地址啊。其实在汇编语句翻译成机器码时会将语句翻译成按相对地址进行寻址。计算方.原创 2020-10-12 16:09:23 · 6083 阅读 · 0 评论 -
thumb指令和arm指令
参考https://www.embedded.com/introduction-to-arm-thumb/一、为什么一个芯片需要thumb和arm两套指令集许多复杂的功能在复杂指令集(CISC)处理器上执行只需要单一的一条指令,即可,虽然可能有点慢,在精简指令集处理器上可能需要多条指令,所以在精简指令集(RISC)CPU上为了减少额外的指令对内存的消耗,考虑引入thumb指令集到处理器。现在最受欢迎的32位微处理器许多都使用RISC技术,不像CISC处理器,RISC引擎每一个时钟周期(个人感觉应原创 2020-10-12 15:52:07 · 5472 阅读 · 0 评论 -
u-boot中的make menuconfig和头文件配置是如何同时发挥作用的
这里以正点原子的i.mx6ull的alientek开发板为例1.我们可以通过include/configs/mx6ull_alientek_emmc.h头文件对u-boot进行裁剪配置,这个文件是我们移植到正点原子开发板的时候自己添加的2.原创 2020-09-17 12:25:32 · 820 阅读 · 0 评论 -
u-boot是如何重定位代的(如何拷贝自己的)
u-boot在启动之后会在_main函数中将自己重定位到靠近DDR内存尾部的地方,避免和linux内核代码冲突原创 2020-09-14 23:20:55 · 901 阅读 · 0 评论 -
u-boot的链接脚本文件u-boot.lds分析
u-boot 版本: 2016.03,NXP更改过的版本,正点原子再次更改,详细可参见正点原子的教程。这里先贴出来链接脚本文件,它是生成过程,可以参考https://blog.youkuaiyun.com/xiaoyink/article/details/108508415,里面有简略的提到,这里主要分析此文件的含义,如下:OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")OUTPUT_ARCH(arm)ENTRY(原创 2020-09-14 20:06:12 · 915 阅读 · 0 评论 -
u-boot编译 Makefile 简单分析
u-boot 版本: 2016.03,NXP更改过的版本,正点原子再次更改,详细可参见正点原子的教程。1. make xxx_defconfig的过程从顶层Makefile开始,前面的变量赋值分析,可以参考《正点原子 I.MX6U嵌入式Linux驱动开发指南》我们直接从上述得到:config-targets = 1 mixed-targets = 0 dot-config = 1根据上述变量进行ifeq等条件选择后,make xxx_defconfig匹配的规则如下(顶层Ma...原创 2020-09-10 16:50:35 · 1502 阅读 · 1 评论 -
Makefile中调用make命令,-C和-f选项的区别
-C选项Makefile中-C是递归调用子目录中的Makefile,-C选项后跟目录,表示到子目录下执行子目录的Makefile,顶层Makefile中的export的变量还有make默认的变量是可以传递给子目录中的Makefile的-f选项顶层Makefile使用make -f调用子目录中的文件(文件名可以随意,不一定用Makefile作为文件名)作为Makefile,好像不能传递变量到底层目录,只能在命令行中加入变量赋值选项,来传递变量;另外经测试,在顶层Makefile中使用-f选项.原创 2020-09-08 11:42:32 · 11279 阅读 · 0 评论 -
Makefile 生成.d 头文件依赖规则
详细的gcc参数说明,参见https://blog.youkuaiyun.com/nawenqiang/article/details/83381237下面是以我写的实际项目中的测试程序的Makefile为例进行说明我们可以把要生成.d文件的gcc指令单独做成一个规则,如下$(OBJS_DIR)/%.d:%.cCC:=gccCFLAGS:=-std=gnu99 -gLDFLAGS:= -lpthreadOBJS_DIR:=./objsMEIHE_SRCS:= mt_test_meihe.c r原创 2020-09-07 15:32:24 · 2301 阅读 · 0 评论 -
链接脚本文件、C源文件、arm汇编源文件中 地址常量 如何相互引用
1原创 2020-09-14 15:00:46 · 1239 阅读 · 0 评论 -
arm中除法和浮点运算
在学习正点原子I.MX6ull芯片开发板的时候,有两个裸机实验(串口和spi)涉及到了除法运算以及浮点运算,先声明,除法运算(定点和浮点,浮点除法是浮点运算的一种)和浮点运算是两个东西:1.除法分为定点除法和浮点除法,arm中定点除法例如32位无符号整形除法,是没有直接的汇编指令的,需要借助软件库来实现;2.浮点数的除法可以调用软件库来进行软件模拟,也可以借助硬件进行浮点数运算(协处理器,cp15指令开启硬件浮点运算)。一、定点数除法指令需要链接gcc库:使用定点数除法运算的时候编.原创 2020-08-05 20:32:36 · 5001 阅读 · 5 评论 -
函数调用,中断以及进程切换,的现场保护的区别
首先,函数调用是预料范围内的代码执行,是完全可控的,当前执行的函数调用另外一个函数时,是从当前代码段通过跳转指令主动跳转到另外一个代码段,只需保存跳转之前的栈顶指针(fp),栈底指针(sp)到栈空间,保存跳转指令的下一条指令的地址到lr寄存器,无须保存所有寄存器的值(如果C函数有使用R4-R11寄存器,还是要保存一下滴,这个C编译器会帮我们完成,无需担心,下面会详细说明),然后还要使用寄存器r0-...原创 2019-10-07 22:35:31 · 8573 阅读 · 7 评论 -
armv7指令集 C函数调用 堆栈指针SP的变化
首先说明一下,arm中函数调用不同的编译器可能差别很大,即使都是arm-linux的交叉编译器,也有差别,有的编译器把r7寄存器作为栈帧寄存器(fp),有的把r11寄存器作为栈帧指针(fp),例如arm-linux-gnueabihf-gcc用的r7和arm-linux-gnueabi-gcc用的r11,另外在函数执行开头的处理也不一样1. arm-linux-gnueabihf-gcc编译器先给函数中变量分配栈空间,然后放fp和sp指向栈顶2. arm-linux-gnueabi-gcc编译器先让原创 2020-06-30 23:11:54 · 3452 阅读 · 2 评论 -
stm32f0717bt6和i.mx6ull启动方式的区别
stm32stm32启动方式分为(根据boot0,boot1的配置选择):1)主闪存存储器= 芯片内置的Flash。这也是正常工作模式2)SRAM = 芯片内置的RAM 区,就是内存啦。3)系统存储器= 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP 程序。这个区域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM 区。第3种方式,是运行厂商自己的引导程序,用来从串口烧写程序,一般没什么用,我们一般使用第1种方式启动stm32 。但是i原创 2020-06-05 13:17:55 · 700 阅读 · 0 评论 -
module Makefile
module Makefile第一种形式在linux上在进行module编译时makefile最简单的形式如下:obj-m += scull.o#这里就一句话,所以make命令就不能省略# make -C /usr/src/linux-headers-2.6.31-14-generic/ SUBDIRS=$PWD modules#注意,SUBDIRS是较老的使用方式,与M等效,建议使用M...原创 2018-03-30 16:18:42 · 3125 阅读 · 0 评论 -
ubuntu中的update-alternatives命令
ubuntu中的update-alternatives命令update-alternatives --install link name path priority用法举例:update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 10在/usr/bin目录下建立建立一个名称为gcc的软连接,指向/etc/alternatives/...原创 2018-04-09 15:44:43 · 1024 阅读 · 0 评论 -
gcc编译器的源码安装
gcc编译器的源码安装参考:https://blog.youkuaiyun.com/zhyj3038/article/details/52412273https://blog.youkuaiyun.com/aBlueMouse/article/details/78145802这里我们以gcc-5.4.0为例,以下都在/root目录下以root用户执行,首先运行sudo -i1、下载gcc-5.4.0源码包gcc5.4.0...原创 2018-04-17 14:53:17 · 1330 阅读 · 0 评论 -
gcc生成动态链接库
Makefile文件如下:OBJS_DIR=./objsCCFLAGS= -shared -Wall -fPIC -Wl,-soname,libcudart.so.4 -gLDFLAGS=ifeq ($(hook),1)CCFLAGS+=-DRUN_REAL_LIBCUDALDFLAGS+= -ldlendifRTAPI_SRCS = runtime_api.c drive...原创 2018-04-26 23:41:23 · 1890 阅读 · 0 评论 -
vim部分命令
Vim三种模式命令模式,插入模式,底行模式进入vim的方式为 vim [] [] [] 其中[]为文件名,支持同时打开多个文件在底行模式中输入指令: :N 向上切换文件 :n 向下切换文件进入vim默认为命令模式,按下i、o、a键切换到插入模式,区别自己试插入模式...原创 2018-05-05 14:12:47 · 327 阅读 · 0 评论 -
Makefile中的include
Makefile中的include命令详解 转载自http://www.cnblogs.com/cuckoos/articles/5049984.html 关于Makefile中的include命令,网上有很多介绍,比较普遍的...转载 2018-05-15 15:18:57 · 506 阅读 · 0 评论 -
pthread 相关
pthread 使用一、thread创建和终止使用pthread相关函数要包含头文件:pthread.h#include <pthread.h>int pthread_create(pthread_t * restrict tidp, const pthread_attr_t * restrict attr, void*(* start_rtn)(void *), void * r...原创 2018-06-23 01:31:12 · 317 阅读 · 0 评论 -
shell中的export
修改生效范围脚本A中export的变量在启动其他脚本的时候会复制一份传入其他脚本。其他脚本中对此变量的修改并不会在离开脚本后生效。 注意:在脚本A中定义了一个变量V赋值为1,export了变量V,在脚本A中启动脚本B,在脚本B中变量V的值就是1,如果在脚本B中修改了V的值为2,那么脚本B结束后,脚本A中的V的值依然是1。 脚本A中export的变量在启动其他脚本的时候会复制一份传...转载 2018-11-03 00:01:28 · 9470 阅读 · 0 评论 -
makefile--函数定义 函数调用
函数定义与调用转载自:https://www.jianshu.com/p/e2c78c8fb4a51. makefile中支持函数的概念make解释器提供了一系列的函数供makefile调用 在makefile中支持自定义函数实现,并调用执行 通过define关键字实现自定义函数示例1--函数定义define func1 @echo "my name is $(0)"...转载 2019-04-26 20:53:37 · 873 阅读 · 0 评论 -
makefile := 与 = 的区别
一、简述1、"="赋值,这种形式是以递归的形式展开变量,及被赋值的变量只有在被引用(使用)时,才会展开,及延迟展开(不常用)2、":="赋值,这种形式是直接展开式赋值。二、举例例子1:foo = $(bar)bar = $(ugh)ugh = Huh?all:;echo $(foo)例子来源于GnuMake上述例子执行结果为(其中all:;echo $(foo)...原创 2019-04-29 10:59:23 · 2203 阅读 · 0 评论 -
Makefile中的eval
这里将openwrt中编译ipk包的时候使用的的Makefile,进行简化拿来进行说明,主要用来实验eval函数的用法PKG_NAME :=bcl_bootdefine Package/$(PKG_NAME) SECTION:=utils CATEGORY:=Utilities TITLE:=lziot_projectendefdefine BuildPac...原创 2019-04-29 14:08:25 · 3055 阅读 · 2 评论 -
Makefile := = ?= += 区别
Makefile := = ?= += 区别转至:http://www.cnblogs.com/wanqieddy/archive/2011/09/21/2184257.html在Makefile中我们经常看到 = := ?= +=这几个赋值运算符,那么他们有什么区别呢?我们来做个简单的实验新建一个Makefile,内容为:ifdef DEFINE_VRE VRE = “Hello Worl...转载 2018-03-30 10:39:32 · 127 阅读 · 0 评论