摘要: 1、gcc编译器 (1)简介 前期的GCC是GNU C Compiler,仅仅用于C语言的编译,经过多年的发展,现在的GCC为GNU Compiler Collection,并且目前支持多种编程语言的编译。 (2)gcc的编译过程 gcc的编译过程包括了四个过程,分别是预处理、编译、汇编和链接,如下 阅读全文
posted @ 2019-09-10 10:38 liangliangge 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 1、压缩包管理 (1)gz和bz2格式 1)gzip -- gz格式的压缩包 压缩:gzip +压缩的文件 解压缩:gunzip + 需要解压的文件 2)bzip2 -- bz2格式的压缩包 压缩:bzip2 +压缩的文件 解压缩:bunzip2 +解压缩的文件 注意:不能对目录进行打包压缩 (2) 阅读全文
posted @ 2019-09-10 10:16 liangliangge 阅读(226) 评论(0) 推荐(0) 编辑
摘要: 1、命令解释器 shell Unix操作系统 bash Linux操作系统 本质:根据输入的命令,调用相应的执行程序。 2、Linux下的快捷键 (1)命令和路径补全 Tab键 (2)主键盘的快捷键 1) 历史命令的切换 历史命令:history 向上遍历:Ctrl+P 向下遍历:Ctrl+N 2) 阅读全文
posted @ 2019-09-10 09:20 liangliangge 阅读(225) 评论(0) 推荐(0) 编辑
摘要: 1、如何取得项目的git仓库 取得项目的git仓库具有两种方法: (1)在工作目录中初始化仓库 在项目的所在的目录下: $ git init 然后使用git add命令对文件进行跟踪: $ git add *.c 将修改进行提交: $ git commit -m "initial project" 阅读全文
posted @ 2019-09-09 21:34 liangliangge 阅读(264) 评论(0) 推荐(0) 编辑
摘要: 1、前言 在Linux内核的源码中,除了简洁的list链表外,内核还有klist链表,它是list链表的线程安全版本,在结构体中提供了整个链表的自旋锁,对链表节点查找、插入和删除等操作,都需要先获得这个自旋锁,klist的链表节点数据结构klist_node引入了引用计数器,只有当节点的的引用计数为 阅读全文
posted @ 2019-09-09 18:28 liangliangge 阅读(1686) 评论(0) 推荐(1) 编辑
摘要: 1、前言 随着Android系统的普及,ADB(Android Debug Bridge)逐渐成了Android设备调试的必不可少的一种重要工具,该工具可以完成多种功能,例如跟踪系统日志,上传或下载文件,安装应用等,ADB其实是一个客户端-服务端程序,其中客户端是用户用来操作的PC机,服务器端就是开 阅读全文
posted @ 2019-09-06 09:25 liangliangge 阅读(9311) 评论(1) 推荐(0) 编辑
摘要: 1、前言 对于任何一个指针来说,必然有三种情况:一种是有效指针,一种是NULL,也就是空指针,一种是错误指针,也就是无效指针,在Linux内核中,所谓的错误指针就是指其已经到达了内核空间的最后一个page,例如,对于32bit的系统来说,内核空间最后地址为0xFFFF FFFF,那么最后一个page 阅读全文
posted @ 2019-09-04 11:52 liangliangge 阅读(2660) 评论(0) 推荐(0) 编辑
摘要: 1、准备好需要烧写的文件 烧写之前,需要先准备好需要的文件,如下: 2、打开QFIL程序 接下来运行QFIL程序,如下: 3、选择端口 程序运行后,选择合适的端口,如下: 点击端口选择,然后选择Port: 4、选择Flat Build模式 在软件中选择Flat Build模式,并选择编程文件和需要烧 阅读全文
posted @ 2019-09-03 20:51 liangliangge 阅读(3726) 评论(0) 推荐(0) 编辑
摘要: 1、前言 在Linux驱动程序编写中,使用DEVICE_ATTR宏,可以定义一个struct device_attribute设备属性,并使用sysfs的API函数,便可以在设备目录下创建出属性文件,当我们在驱动程序中实现了show和store函数后,便可以使用cat和echo命令对创建出来的设备属 阅读全文
posted @ 2019-09-03 18:22 liangliangge 阅读(2851) 评论(4) 推荐(1) 编辑
摘要: 1、前言 什么是字节对齐呢?现代计算机中的内存空间都是按字节(byte)划分的,从理论上讲似乎任何类型的变量的访问都可以从任何地址开始,但是实际情况是在访问特定变量的时候经常需要在特定的内存地址进行访问,因此,就需要各种类型数据按照一定的规则在空间上排列,而不是顺序地一个接一个地排放,这就是字节对齐 阅读全文
posted @ 2019-08-31 18:48 liangliangge 阅读(625) 评论(0) 推荐(0) 编辑
摘要: 1、简介 Git是一个开源的分布式版本控制系统,能用于快速高效地处理任何或小或大的项目,它是Linus Torvalds为了帮助管理Linux内核开发而开发的一个源码开放的版本控制软件。 2、Linux平台安装git Git的工作需要调用curl、zlib、openssl等库,因此在安装git之前需 阅读全文
posted @ 2019-08-30 16:21 liangliangge 阅读(1251) 评论(0) 推荐(0) 编辑
摘要: 1、apt-get命令 apt-get命令是Debian Linux发行版中的APT软件包管理工具,所有基于Debian的发行都使用这个包管理系统。 (1)命令语法 (2)常用选项 -c:指定配置文件。 (3)参数 管理指令:对APT软件包的管理操作。 软件包:指定要操作的软件包。 (4)实例 使用 阅读全文
posted @ 2019-08-29 21:08 liangliangge 阅读(472) 评论(0) 推荐(0) 编辑
摘要: 1、前言 在C语言的结构体中,由于字节对齐的问题,所以成员的地址并不能直接根据数据类型的大小进行计算,使用宏offsetof可以获得结构体成员相对于结构体首地址的字节偏移量。 2、offsetof宏实现 在C标准库中offsetof的声明如下,需要包含头文件<stddef.h>: size_t of 阅读全文
posted @ 2019-08-29 11:46 liangliangge 阅读(375) 评论(0) 推荐(0) 编辑
摘要: 1、前言 Linux内核中有大量的驱动,而这些驱动往往具有类似的结构,根据面向对象的思想,可以将共同的部分提取为父类,而这个父类就是kobject,kobject结构体中包含了大量设备的必须信息,而三大类设备驱动都需要包含这个kobject结构,运用面向对象的思想来看问题,也就是继承来自kobjec 阅读全文
posted @ 2019-08-26 18:37 liangliangge 阅读(2004) 评论(0) 推荐(0) 编辑
摘要: sysfs - _The_ filesystem for exporting kernel objects. sysfs – 用于导出内核对象(kobject)的文件系统 Patrick Mochel <mochel@osdl.org> Mike Murphy <mamurph@cs.clemson 阅读全文
posted @ 2019-08-23 14:16 liangliangge 阅读(521) 评论(0) 推荐(0) 编辑
摘要: Everything you never wanted to know about kobjects, ksets, and ktypes 关于kobject,kset和ktypes的一切,你永远不会想知道 :Author: Greg Kroah-Hartman <gregkh@linuxfound 阅读全文
posted @ 2019-08-22 20:30 liangliangge 阅读(343) 评论(0) 推荐(0) 编辑
摘要: 1、前言 struct kref结构体是一个引用计数器,它被嵌套进其它的结构体中,记录所嵌套结构的引用计数。引用计数用于检测内核中有多少地方使用了某个对象,每当内核的一个部分需要某个对象所包含的信息时,则该对象的引用计数加1,如果不需要相应的信息,则对该对象的引用计数减1,当引用计数为0时,内核知道 阅读全文
posted @ 2019-08-21 17:11 liangliangge 阅读(3237) 评论(0) 推荐(1) 编辑
摘要: 1、losetup命令 Linux系统losetup命令用来设置循坏设备,循坏设备可以把文件虚拟成块设备,借此来模拟整个文件系统,让用户得以将其视为硬盘驱动器,光驱等设备,并挂入当作目录来使用。 (1)语法 (2)常用选项 -a:显示所有循坏设备的状态。 -d:卸载设备。 -e<加密选项>:启动加密 阅读全文
posted @ 2019-08-16 20:36 liangliangge 阅读(1546) 评论(0) 推荐(0) 编辑
摘要: 1、mke2fs命令 在Linux系统下,mke2fs命令可用于创建磁盘分区上的”ext2/ext3”文件系统。 (1)语法 (2)常用选项 -b<区块大小>:指定区块大小,单位为字节。 -c:检查是否有损坏的区块。 -f<不连续区段大小>:指定不连续区段的大小,单位为字节。 -F:不管指定的设备为 阅读全文
posted @ 2019-08-16 20:31 liangliangge 阅读(1615) 评论(0) 推荐(0) 编辑
摘要: 1、mount命令 在Linux系统下,mount命令用于加载文件系统到指定的加载点。 (1)命令语法 (2)常用选项说明 -V:显示版本。 -l:显示已加载的文件系统列表。 -h:显示帮助信息并退出。 -v:冗长模式,输出指令执行的详细信息。 -n:加载没有写入文件“/etc/mtab”中的文件系 阅读全文
posted @ 2019-08-16 16:31 liangliangge 阅读(1620) 评论(0) 推荐(0) 编辑
摘要: 1、mknod命令 在Linux系统下,mknod命令可用于系统下字符设备文件和块设备文件的创建。 (1)命令语法 (2)常用选项说明 -Z:设置安全的上下文。 -m:设置权限信息。 -help:显示帮助信息。 --version:显示版本信息。 (3)参数 文件名:要创建的设备文件名。 类型:指定 阅读全文
posted @ 2019-08-16 15:36 liangliangge 阅读(2182) 评论(0) 推荐(0) 编辑
摘要: 1、insmod命令 在Linux系统下,insmod命令用于将给定的模块加载到内核中去,Linux系统有许多功能是通过模块的方式,在需要时才载入kernel,这样做可以使kernel较为精简,进而提高效率,这类可载入的模块,通常是设备驱动程序。 (1)命令语法 insmod(选项)(参数) (2) 阅读全文
posted @ 2019-08-16 11:58 liangliangge 阅读(2879) 评论(0) 推荐(0) 编辑
摘要: 1、dd命令的使用 dd命令用于复制文件并对源文件的内容进行转换和格式化处理,在有需要的时候可以使用dd命令对物理磁盘进行操作,使用dd对磁盘操作时,最好使用块设备文件。 (1)命令语法 (2)常用选项说明 if=filename:输入文件名,默认为标准输入,即指定源文件。 of=filename: 阅读全文
posted @ 2019-08-16 10:17 liangliangge 阅读(1079) 评论(0) 推荐(0) 编辑
摘要: 1、globalmem虚拟设备实例 globalmem为“全局内存”的意思,在globalmem字符设备中会分配一片大小为GLOBALMEM_SIZE(4KB)的内存空间,并在驱动中提供对这片内存的读写、控制和定位函数,供用户空间的进程能通过Linux系统调用获取和设置这片内存。 (1)头文件、宏以 阅读全文
posted @ 2019-08-15 20:45 liangliangge 阅读(1369) 评论(0) 推荐(0) 编辑
摘要: 1、Linux字符设备驱动的基本结构 Linux系统下具有三种设备,分别是字符设备、块设备和网络设备,Linux下的字符设备是指只能一个字节一个字节读写的设备,不能随机读取设备内存中某一数据,读取数据的时候需要按照先后顺序进行,字符设备是面向流的设备,常见的字符设备有鼠标、键盘、串口、控制台和LED 阅读全文
posted @ 2019-08-15 19:38 liangliangge 阅读(864) 评论(0) 推荐(0) 编辑
摘要: 一、双向链表list_head Linux内核驱动开发会经常用到Linux内核中经典的双向链表list_head,以及它的拓展接口和宏定义:list_add、list_add_tail、list_del、list_entry、list_for_each等。 在内核源码中,list_head结构体的定 阅读全文
posted @ 2019-08-15 17:10 liangliangge 阅读(4846) 评论(1) 推荐(0) 编辑
摘要: 1、Linux文件的基本操作 Linux文件的基本操作主要包括了文件的创建、打开、读写和关闭等基本操作。 1.1、文件操作系统调用 (1)创建文件系统函数 int creat(const char *pathname, mode_t mode); 参数: pathname:要创建文件的名称 mode 阅读全文
posted @ 2019-08-15 16:26 liangliangge 阅读(869) 评论(0) 推荐(0) 编辑
摘要: 本文章将介绍如何在Ubunt下进行Linux源码下载,并进行简单的编译步骤。 1、下载linux源码 先查看对应的Ubuntu对应版本源码 $ sudo apt-cache search linux-source 查看Ubuntu的源码版本相关信息 $ uname -a 使用命令下载对应的源码并解压 阅读全文
posted @ 2019-08-15 16:15 liangliangge 阅读(6470) 评论(0) 推荐(0) 编辑
摘要: 在Linux驱动开发过程中,往往需要搭建交叉编译开发环境,其中,最重要的环节就是安装交叉编译工具链,本文介绍如何在Ubuntu下搭建交叉编译开发环境。 1、官网下载交叉编译工具链 链接如下: https://www.linaro.org/downloads/ 2、解压文件 $ mv gcc-lina 阅读全文
posted @ 2019-08-15 16:05 liangliangge 阅读(2553) 评论(0) 推荐(0) 编辑
摘要: 如何去更改printk的打印级别? 1、查看当前控制台的打印级别 # cat /proc/sys/kernel/printk 该文件有4个数字值,它们根据日志记录消息的重要性,定义将其发送到何处,上面显示的4个数据分别对应如下: 控制台日志级别:优先级高于该值得消息将被打印到到控制台; 默认的消息日 阅读全文
posted @ 2019-08-15 15:50 liangliangge 阅读(1735) 评论(0) 推荐(0) 编辑
摘要: 1、find命令的使用 在Linux中可以使用find命令在指定的目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名,当使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件,并将查找到的文件进行全部显示。 (1)命令语法 find命令的语法如下: find根据下面 阅读全文
posted @ 2019-08-15 15:42 liangliangge 阅读(4279) 评论(0) 推荐(0) 编辑
摘要: 在Linux系统中,vim是一款非常好用的文本编辑器,那么,如何在Linux下的vim编辑器设定Tab的缩进长度呢? Linux系统下,vim编辑器Tab键的默认长度为8个空格,在vim中可以通过修改用户的配置文件来进行设置,设置步骤如下。 1、创建.vimrc配置文件 用户可以通过下面的命令进行配 阅读全文
posted @ 2019-08-15 15:31 liangliangge 阅读(6713) 评论(0) 推荐(2) 编辑
摘要: 一、什么是内联函数 在C语言中,如果一些函数被频繁的调用,不断地用函数入栈,即函数栈,则会造成栈空间或者栈内存的大量消耗,为了解决这个问题,特别的引入了inline关键字,表示为内联函数。栈空间指的是函数内数据的内存空间,在一个系统下,栈空间的资源是有限的,假如频繁大量的使用就会因栈空间的不足而导致 阅读全文
posted @ 2019-07-08 20:04 liangliangge 阅读(8945) 评论(1) 推荐(6) 编辑
摘要: 1、简介 vim是vi发展过来的一款文本编辑器,功能非常强大。 2、vim的工作模式 vim有三种工作模式,分别为命令模式、编辑模式、末行模式: 1)命令模式:打开文件之后,默认进入命令模式; 2)编辑模式:需要输入一些命令,切换到编辑模式; 3)末行模式:末行模式下可以输入一些命令。 三种工作模式 阅读全文
posted @ 2019-06-21 15:31 liangliangge 阅读(505) 评论(0) 推荐(0) 编辑
摘要: samba服务器安装 1、简介 作用:samba文件服务器允许通过网络跨步同的操作系统进行文件共享。 2、安装samba服务器 安装完成后使用下面命令检测是否安装成功 安装成功后,将输出以下 3、samba服务器配置 创建共享目录: 修改配置文件: 在文件的最后面,添加相关信息: 配置说明: [sa 阅读全文
posted @ 2019-06-20 17:00 liangliangge 阅读(1322) 评论(0) 推荐(0) 编辑
摘要: ssh服务器搭建 作用:用于远程登录到服务器 (1)服务器端 安装ssh: 查看ssh是否已经安装: (2)客户端 使用命令进行远程登录: 确认连接时,一定要选择yes/no。 退出登录命令: (3)scp命令测试 scp == super copy 作用:用于文件的传输 命令使用的前提条件:目标主 阅读全文
posted @ 2019-06-20 15:53 liangliangge 阅读(657) 评论(0) 推荐(0) 编辑
摘要: NFS为网络文件系统,允许网络中的计算机通过TCP/IP协议进行网络资源共享。 软件安装: (1)服务器端 1)创建共享目录 使用命令行创建共享的目录: 2)修改配置文件 文件配置格式:<输出目录> 客户端 (选项:访问权限,用户映射,其他) 输出目录:NFS系统中所定义的给客户端使用的文件系统 客 阅读全文
posted @ 2019-06-20 15:45 liangliangge 阅读(287) 评论(0) 推荐(0) 编辑
摘要: FTP服务器基本搭建 -- vsftpd 作用:文件的基本上传和下载 1、服务器端 软件的安装: (1)修改配置文件 配置文件修改: (2)重启服务 2、客户端 (1)实名用户登录 回车之后,输入服务器的用户名和密码进行登录。 文件的上传: 文件的下载: 注意:不允许直接操作目录,需要对目录进行操作 阅读全文
posted @ 2019-06-20 14:29 liangliangge 阅读(828) 评论(0) 推荐(0) 编辑
摘要: 1、网络中进程之间如何通信? 本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道、FIFO、消息队列) 同步(互斥量、条件变量、读写锁、文件和写记录锁、信号量) 共享内存(匿名的和具名的) 远程过程调用(Solaris门和Sun RPC) 但这些都不是本文的主题!我们要讨 阅读全文
posted @ 2019-06-19 23:48 liangliangge 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 问题:xxx(用户名) is not in the sudoers file. This incident will be reported. 用户管理: 1、创建用户 (1)方法1 (2)方法2 (3)用户组添加 2、用户设置 (1)修改用户xxx密码 (2)修改当前用户密码 (3)退出当前用户 阅读全文
posted @ 2019-06-19 12:32 liangliangge 阅读(920) 评论(0) 推荐(0) 编辑