摘要: 1、前言 Linux系统中的文件系统由两层结构进行构建:第一层为虚拟文件系统(VFS),第二层则是各种不同的具体的文件系统。VFS则是将各种具体的文件系统的公共部分抽取出来,从而形成一个抽象层,是Linux系统内核的一部分,它位于用户程序和具体的文件系统之间,对用户提供了标准的文件系统调用接口,对于 阅读全文
posted @ 2019-12-28 21:54 liangliangge 阅读(3445) 评论(0) 推荐(0) 编辑
摘要: 1、前言 C库函数sscanf()和scanf()函数类似,前者用于从字符串中读取格式化输入,后者则是从键盘(stdin)中格式化输入,该函数的声明如下所示: #include <stdio.h> int sscanf(const char *str, const char *format, ... 阅读全文
posted @ 2019-12-28 21:51 liangliangge 阅读(829) 评论(0) 推荐(0) 编辑
摘要: 1、chown命令 chown命令能够改变某个文件或目录的所有者和所属组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组,只有文件所属者和超级用户才可以使用该命令。 (1)命令语法 chown(选项)(参数) (2)选项 -c:效果类似"-v"参数,但是只显示更改的部分; 阅读全文
posted @ 2019-12-28 20:12 liangliangge 阅读(614) 评论(0) 推荐(0) 编辑
摘要: 1、前言 在前面的文章《MSM8909中LK阶段LCM屏适配与显示流程分析(一)》,链接如下: https://www.cnblogs.com/Cqlismy/p/12019317.html 介绍了如何使用GCDB工具生成要适配的屏幕的相关配置文件,同时,也介绍了如何在LK启动阶段中,在基于Qual 阅读全文
posted @ 2019-12-11 21:52 liangliangge 阅读(1343) 评论(0) 推荐(1) 编辑
摘要: 1、前言 在驱动开发中,我们往往需要适配一些新的屏幕或者调试一些屏幕的参数等,对于Qualcomm的MSM8909这款SoC,当启动Android系统时,会有一个LK阶段,该阶段用来启动Linux内核系统,本文,将简单介绍如何在MSM8909的LK阶段中如何进行LCM屏的兼容和适配流程,并对LK阶段 阅读全文
posted @ 2019-12-10 21:28 liangliangge 阅读(2371) 评论(1) 推荐(0) 编辑
摘要: 1、前言 LK是Little Kernel的缩写,在Qualcomm平台的Android系统中普遍采用LK作为bootloader,它是一个开源项目,LK是整个系统的引导部分,所以不是独立存在的,但是目前LK只支持arm和x86架构,LK显著的特点是实现了一个简单的线程机制(thread),并和Qu 阅读全文
posted @ 2019-12-09 19:29 liangliangge 阅读(3719) 评论(1) 推荐(0) 编辑
摘要: 1、前言 在前面的文章《Uboot启动流程分析(二)》中,链接如下: https://www.cnblogs.com/Cqlismy/p/12002764.html 已经对_main函数的整个大体调用流程,以及函数的实现的各个功能进行了简单地分析,接下来,本篇文章将对board_init_f函数进行 阅读全文
posted @ 2019-12-08 17:10 liangliangge 阅读(2099) 评论(0) 推荐(2) 编辑
摘要: 1、前言 在前面的文章《Uboot启动流程分析(一)》中,链接如下: https://www.cnblogs.com/liangliangge/p/12000889.html 已经简单地分析了low_level_init函数,其调用流程如下: save_boot_params_ret | cpu_i 阅读全文
posted @ 2019-12-07 17:52 liangliangge 阅读(2135) 评论(0) 推荐(0) 编辑
摘要: 1、前言 Linux系统的启动需要一个bootloader程序,该bootloader程序会先初始化DDR等外设,然后将Linux内核从Flash中拷贝到DDR中,最后启动Linux内核,uboot的全称为Universal Boot Loader,Linux系统中常用的bootloader就是ub 阅读全文
posted @ 2019-12-07 10:45 liangliangge 阅读(3158) 评论(0) 推荐(1) 编辑
摘要: 文章转载链接: https://blog.csdn.net/RadianceBlau/article/details/73229005 对于嵌入式工程师了解芯片启动过程是十分有必要的,在分析、调试各种问题的时候都有可能涉及到这方面的知识,同时这部分知识也是比较复杂的,因为其中涉及到芯片内部架构,启动 阅读全文
posted @ 2019-12-02 19:48 liangliangge 阅读(2369) 评论(0) 推荐(0) 编辑
摘要: 1、前言 NXP官方提供了一个DDR初始化工具,名称为ddr_stress_tester,该工具具有以下特点: 该工具能通过USB OTG接口与目标板进行连接,通过USB OTG接口完成DDR的初始化与测试; 该工具具有一个默认的Excel表配置文件,通过该表能设置目标板的DDR硬件相关信息,该Ex 阅读全文
posted @ 2019-12-01 23:04 liangliangge 阅读(3337) 评论(2) 推荐(0) 编辑
摘要: 1、前言 DDR的全称为Double Data Rate SDRAM,也就是双倍速率的SDRAM,SDRAM在一个CLK周期传输一次数据,而DDR在一个CLK周期传输两次数据,分别在上升沿和下降沿各传输一次数据,该概念称为预取,在描述DDR速度的时候一般使用MT/S单位,也就是每秒多少兆次数据传输。 阅读全文
posted @ 2019-12-01 11:03 liangliangge 阅读(4979) 评论(1) 推荐(0) 编辑
摘要: 1、前言 CoM-P6UL是盈鹏飞科技有限公司基于NXP原厂I.MX6UL芯片生产研发的核心板,本文将对CoM-P6UL适配NXP的基于Linux4.1.15版本的uboot板级源码的过程进行介绍。 2、开发环境 目标板:CoM-P6UL(RAM:256MB,Nand Flash:256MB) 主机 阅读全文
posted @ 2019-11-30 10:15 liangliangge 阅读(2305) 评论(0) 推荐(0) 编辑
摘要: 1、修改板级文件 $ cd AOSP $ vim device/qcom/msm8909/BoardConfig.mk 如下所示: 2、修改defconfig文件 $ cd kernel/arch/arm/configs/ $ vim msm8909_defconfig or $ vim msm89 阅读全文
posted @ 2019-11-29 15:33 liangliangge 阅读(949) 评论(0) 推荐(0) 编辑
摘要: 1、前言 原子操作指的是该操作不会在执行完毕之前被任何其它任务或事件打断,它是最小的执行单位,不会有比它更小的执行单位,原子实际上使用了物理学中物质微粒的概念,在Linux内核中,原子操作需要硬件的支持,和架构相关,使用汇编语言去实现,它在Linux内核中主要应用于资源的引用计数 2、原子操作 3、 阅读全文
posted @ 2019-11-21 21:43 liangliangge 阅读(338) 评论(0) 推荐(0) 编辑
摘要: 1、前言 众所周知,Linux系统是一个多任务的操作系统,当多个任务同时访问同一片内存区域的时候,这些任务可能会相互覆盖内存中数据,从而造成内存中的数据混乱,问题严重的话,还可能会导致系统崩溃。 2、相关概念 了解一下Linux内核中并发与竞态的相关概念,如下: 并发与竞争:并发指的是多个执行单元同 阅读全文
posted @ 2019-11-20 20:10 liangliangge 阅读(581) 评论(0) 推荐(0) 编辑
摘要: 1、前言 在嵌入式Linux开发中,对嵌入式SoC中的GPIO进行控制非常重要,Linux内核中提供了GPIO子系统,驱动开发者在驱动代码中使用GPIO子系统提供的API函数,便可以达到对GPIO控制的效果,例如将IO口的方向设置为输入或输出,当IO口的方向为输入时,可以通过调用API函数获取相应的 阅读全文
posted @ 2019-11-19 19:20 liangliangge 阅读(4718) 评论(0) 推荐(2) 编辑
摘要: 1、前言 Linux内核中的定时器是一个很常用的功能,某些需要周期性处理的工作都需要用到定时器。在Linux内核中,使用定时器功能比较简单,需要提供定时器的超时时间和超时后需要执行的处理函数。 2、常用API接口 在Linux内核中使用全局变量jiffies来记录系统从启动以来的系统节拍数,当系统内 阅读全文
posted @ 2019-11-14 21:17 liangliangge 阅读(3269) 评论(0) 推荐(0) 编辑
摘要: 1、前言 在Android开发中可能会遇到添加新的按键的需求,本文将简单介绍如何在Android系统中完成一个新的按键的添加。 当系统有新的按键需要添加时,Linux内核下的键码到Android系统中键码是如何进行转换映射的? 2、内核添加设备节点 首先,我们需要在Linux内核添加新的按键值,在L 阅读全文
posted @ 2019-11-12 20:38 liangliangge 阅读(2948) 评论(0) 推荐(0) 编辑
摘要: 1、前言 Android系统使用HAL这种设计模式,使得上层服务与底层硬件之间的耦合度降低,在文件: AOSP/hardware/libhardware/include/hardware/hardware.h 中描述了HAL的编写规范,并且给出了标准接口,本文将通过一个简单的实例讲解HAL的编写。 阅读全文
posted @ 2019-11-08 22:07 liangliangge 阅读(1980) 评论(0) 推荐(0) 编辑
摘要: 在Linux内核中,设备树节点中的status属性的值决定了是否开启设备,当status属性没有在设备节点中定义时,默认设备是开启的。 关于设备树节点中status属性的处理的代码位于drivers/of/base.c文件中,有两个函数,如下所示: /** * __of_device_is_avai 阅读全文
posted @ 2019-11-08 17:09 liangliangge 阅读(826) 评论(0) 推荐(0) 编辑
摘要: 1、前言 Android系统硬件抽象层(Hardware Abstraction Layer),简写为HAL,是连接Android Framework与Linux内核设备驱动的重要桥梁。HAL存在的意义有以下两个方面: (1)HAL层屏蔽掉不同硬件设备的差异,为Android提供了统一的设备访问接口 阅读全文
posted @ 2019-11-07 22:05 liangliangge 阅读(4440) 评论(0) 推荐(1) 编辑
摘要: 1、前言 Android系统中,应用程序一般是使用Java语言进行开发的,但是通过C语言也可以进行Android中的可执行程序开发,接下来,将简单介绍在Android系统中如何通过C程序来访问内核中sysfs的属性文件,也可以理解为驱动设备节点。 2、添加kernel驱动设备节点 做过Linux内核 阅读全文
posted @ 2019-11-06 22:29 liangliangge 阅读(1083) 评论(0) 推荐(0) 编辑
摘要: 1、前言 Android.mk用于向编译系统描述源文件和共享库,它实际上是编译系统解析一次或多次的微小GNU makefile片段。它的语法支持将源文件分组为模块,模块是静态库、共享库或独立的可执行文件。 2、简单示例 首先来看一个最简单的Android.mk的例子,如下所示: # A simple 阅读全文
posted @ 2019-11-05 20:39 liangliangge 阅读(366) 评论(0) 推荐(0) 编辑
摘要: Android Init Language Android初始化语言 The Android Init Language consists of five broad classes of statements,which are Actions, Commands, Services, Optio 阅读全文
posted @ 2019-11-04 21:31 liangliangge 阅读(661) 评论(0) 推荐(0) 编辑
摘要: 1、前言在嵌入式系统中,许多SoC的内部都包含了pin控制器,通过芯片内部的pin控制器,我们可以配置一个或者一组引脚的状态和功能特性,Linux内核为了统一各SoC厂商的引脚管理,提供了pinctrl子系统。 2、引脚功能分类嵌入式芯片手册往往有一个GPIO控制的章节来描述SoC的引脚如何进行配置 阅读全文
posted @ 2019-11-04 20:41 liangliangge 阅读(2886) 评论(0) 推荐(0) 编辑
摘要: 1、Android的开机启动流程 Android的层次框架图,如下所示: 图片清晰地展示了Android的五层架构,从上到下依次是:应用层、应用框架层、库层、运行时层以及Linux内核层。Android的启动流程是自下向上的,大体上可以分为三个阶段:1、BootLoader引导启动内核;2、启动Li 阅读全文
posted @ 2019-11-02 08:50 liangliangge 阅读(4285) 评论(0) 推荐(0) 编辑
摘要: (1)getprop 在Android系统中,使用getprop命令可以从系统中读取一些设备信息,属性的文件例如: init.rc default.prop /system/build.prop 查询Android设备的所有配置信息: adb shell getprop 在Android终端上运行上 阅读全文
posted @ 2019-11-01 20:13 liangliangge 阅读(14887) 评论(0) 推荐(0) 编辑
摘要: C中运算符优先级和结合性一览表: 在上表中能总结出一下规律: (1)结合方向只有三个是从右往左,其余都是从左往右; (2)逗号运算符的优先级最低; (3)对于优先级,有一个普遍规律:算术运算符 > 关系运算符 > 逻辑运算符 > 赋值运算符,逻辑运算符中的“!”除外。 下图是一些容易出错的优先级问题 阅读全文
posted @ 2019-10-31 20:42 liangliangge 阅读(267) 评论(0) 推荐(0) 编辑
摘要: 1、前言 C的位运算符有&(按位与)、|(按位或)、^(按位异或)、~(按位取反),位运算符把运算对象看作是由二进制位组成的位串信息,按位完成指定的运算,得到相应的结果。 2、位运算符 在上面提到的运算符中,~(按位取反)为单目运算符,其它的都为双目运算符,位运算符的优先级从高到低,依次为~、&、^ 阅读全文
posted @ 2019-10-31 20:01 liangliangge 阅读(298) 评论(0) 推荐(0) 编辑
摘要: 由于访问的是/proc/kmsg,因此需要先获取root权限: adb root adb shell "while true; do cat; sleep 1; done < /proc/kmsg" 阅读全文
posted @ 2019-10-29 14:05 liangliangge 阅读(1087) 评论(0) 推荐(1) 编辑
摘要: 1、前言 Source Insight这个软件工具功能非常强大,很适合用来分析一些大型的code工程,例如Linux内核源码,本文将简单介绍如何在Source Insight工程中添加一种新的文件类型。 2、添加步骤 在添加的过程中以Linux内核中设备树文件进行举例测试,设备树是一种描述硬件设备的 阅读全文
posted @ 2019-09-28 13:14 liangliangge 阅读(1511) 评论(0) 推荐(0) 编辑
摘要: 1、前言 NanoPi NEO Plus2是友善电子推出的一款非常小巧精致的开源硬件,该开源硬件的CPU是基于Allwinner公司的64位四核ARM Cortex-A53处理器H5,并且内置了六核Mail450 GPU,该开源硬件集成了1GB DDR3内存,标配8GB eMMC高速闪存,板载了Wi 阅读全文
posted @ 2019-09-27 22:33 liangliangge 阅读(1875) 评论(0) 推荐(0) 编辑
摘要: 1、前言 当我们拿到别人拷贝的系统时,往往需要修改拷贝系统的密码、用户名和主机名,本文简单介绍在Ubuntu下如何进行相关配置文件的修改。 2、如何修改 (1)修改root的密码 运行下面的命令对对root密码进行修改,命令运行过程中需要输入用户密码: 按照提示输入新的密码,回车后出现密码修改成功提 阅读全文
posted @ 2019-09-22 17:34 liangliangge 阅读(7135) 评论(2) 推荐(0) 编辑
摘要: 1、本地生成ssh-key 在本地cmder终端下运行下面的命令生成ssh的公钥和私钥文件: 其中,.ssh/id_rsa为私钥文件,留在本地使用,而.ssh/id_rsa.pub为公钥文件,一般需要上传到Linux服务上使用。 2、将公钥拷贝到Linux服务器 在Windows下的user的.ss 阅读全文
posted @ 2019-09-18 11:17 liangliangge 阅读(3651) 评论(0) 推荐(0) 编辑
摘要: 1、查看当前ssh服务器端口号 在修改ssh服务器的端口号之前,首先查看ssh服务器监听的端口号,使用netstat命令: 运行结果如下所示,一般的默认端口号为22: 2、如何修改默认的ssh服务器端口 在上面已经介绍了如何查看ssh服务器的端口号,接下来介绍如何去修改默认的ssh服务器端口号: 可 阅读全文
posted @ 2019-09-18 09:33 liangliangge 阅读(25869) 评论(1) 推荐(0) 编辑
摘要: 1、修改putty默认的颜色方案 初次使用putty时,发现默认的配色的方案看得非常难受,特别是黑色背景,深蓝色的字体,根本看不清楚,下面介绍如何更改默认的配色方案: (1)下载配置文件 首先下载注册表文件,链接如下: https://www.igvita.com/2008/04/14/custom 阅读全文
posted @ 2019-09-16 21:47 liangliangge 阅读(5516) 评论(0) 推荐(0) 编辑
摘要: 1、more命令 在Linux中,more命令是一个基于vi编辑器的文本过滤器,它能以全屏的方式按页显示文本文件的内容,more里面内置了一些快捷键。 (1)命令语法 (2)常用选项 -<number>:指定每屏显示的行数; -d:显示”[Press space to continue, 'q' t 阅读全文
posted @ 2019-09-12 18:19 liangliangge 阅读(505) 评论(0) 推荐(0) 编辑
摘要: 1、前言 Linux内核中的设备驱动模型,是建立在sysfs设备文件系统和kobject上的,由总线(bus)、设备(device)、驱动(driver)和类(class)所组成的关系结构,在底层,Linux系统中的每个设备都有一个device结构体的实例,本文将对Linux内核的device结构体 阅读全文
posted @ 2019-09-11 16:52 liangliangge 阅读(6554) 评论(0) 推荐(1) 编辑
摘要: 在Linux下查看CPU信息,机器型号,内存等信息。 (1)系统 # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # 查看CPU信息 # hostname # 查看计算机名 # ls 阅读全文
posted @ 2019-09-10 17:46 liangliangge 阅读(2259) 评论(0) 推荐(1) 编辑