- 博客(31)
- 资源 (5)
- 问答 (1)
- 收藏
- 关注

原创 记录一次失败的系统抢救/折腾经历
一、事故起因大概描述下事故起因:win10/ubuntu16.04双系统,分别安装在两块256Gb大小的NVME SSD上,以UEFI模式Grub2引导。某天我心血来潮,想要验证核显与独显是否能一起工作,多次在系统启动过程中强制下电(作死行为。。。),终于在一次强制下电后,win10无法启动了,而且连安全模式都无法进入,一直卡在蓝屏界面。蓝屏界面提示如下:你的设备/电脑需要修复作为一...
2019-01-26 15:18:23
9249
1

原创 UEFI安装Win10/Ubuntu16.04双系统记录
本文基于以下硬件环境: 主板:华硕ROG B250G 硬盘:浦科特M8PEG 256g(NVME M.2)1. 操作系统相关科普为安装双系统,我在网上查了许多资料,一些名词似曾相识却又不解其意,特在此总结下:UEFI(Unified Extensible Firmware Interface):全称“统一的可扩展固件接口”,是EFI的升级版,用于取代传...
2018-03-11 11:27:51
18314
1

原创 device_create()、device_register()、deivce_add()区别
在字符设备驱动开发的入门教程中,最常见的就是用device_create()函数来创建设备节点了,但是在之后阅读内核源码的过程中却很少见device_create()的踪影了,取而代之的是device_register()与device_add()
2017-06-28 15:00:27
15646

原创 Android ueventd浅析
在linux2.6之后,udev取代了devfs,但是在android中却没有udev或者mdev1,而是由ueventd进程实现了类似功能(管理设备节点权限、创建设备节点)。
2017-05-19 11:37:08
7077

原创 input子系统事件处理层(evdev)的环形缓冲区
在事件处理层(evdev.c)中结构体evdev_client定义了一个环形缓冲区(circular buffer),其原理是用数组的方式实现了一个先进先出的循环队列(circular queue),用以缓存内核驱动上报给用户层的input_event事件。struct evdev_client { unsigned int head; // 头指针...
2017-04-14 10:15:32
2550
1

原创 request_firmware()——Linux固件子系统接口函数分析
一些不带内置存储的设备,依赖于驱动预加载的固件才能运行,传统做法是将固件二进制码作为一个数组编译进驱动代码,这种方法图一时省力,却为后续的维护升级带来了麻烦。针对这种情况,在内核中其实早有解决办法,request_firmware()是一套成熟的固件加载方案:将固件以二进制文件形式存储于文件系统之中,在内核启动后再从用户空间将固件传递至内核解析固件,最后加载至硬件设备。
2017-03-04 10:33:51
19780
2

原创 ioctl()分析——从用户空间到设备驱动
一个字符设备驱动通常会实现常规的打开、关闭、读、写等功能,但在一些细分的情境下,如果需要扩展新的功能,通常以增设ioctl()命令的方式实现,其作用类似于“拾遗补漏”。在文件I/O中,ioctl扮演着重要角色,本文将以驱动开发为侧重点,从用户空间到内核空间纵向分析ioctl函数。 用户空间的ioctl()#include <sys/ioctl.h> int i...
2017-03-02 17:43:09
28290
11
原创 对一致性DMA映射与流式DMA映射的一些粗浅认识
我在近期的工作中接触到了以下两种DMA映射的API:一致性DMA映射dma_alloc_coherent()流式DMA映射dma_map_single()进而想要简单了解下其中的原理,最重要的是想弄明白两者之间的区别。经过一番搜索,在大名鼎鼎的《Linux Device Drivers》与内核源码文档<dma-api-howto.rst>中找到了DMA映射相关的描述,但内容却不符合我心意,其描述重点在于API用法、在于“注意事项”,对于原理解析只有寥寥数笔,无法通过资料直
2021-10-05 17:42:08
3355
3
原创 初识Systemd
前言依Linux系统惯例,带字母d的一般为守护进程(daemon),Systemd即为System Daemon,是Linux下的一款系统和服务管理器,用于取代传统的Init组件。Systemd功能强大,诸如Gnome桌面、用户登录管理、网络服务都已集成其中,甚至后续udev也要加入Systemd的"豪华套餐"。不过开源社区对于Systemd则是充满了争议:有人认为它有利于Linux系统标准化;有人则认为它管的太多——不符合UNIX“keep simple, keep stupid"的设计哲学,总之是
2020-05-13 12:03:57
1772
原创 Centos7.3串口无输出问题解决方案
鄙人从事内核驱动开发工作,所使用的调试服务器为CentOS7.3,只有在BIOS启动阶段有串口日志,进入OS之后就没有了。某日,所写的驱动一加载就会导致系统重启,由于看不到内核panic日志,调试很是棘手,当时因为临近deadline,不得已一行一行代码debug,费了好大功夫才修复驱动加载的问题。后来得闲,深入研究了下,发现原来是在内核启动时没有传递串口相关参数,解决方案很简单——只需要修改...
2019-01-26 18:10:33
3716
原创 Linux系统通过远程终端修改分辨率
最近的工作是测试服务器的板载GPU,由于一切处于开发阶段,连USB驱动都没有,无法通过键鼠操作,切换桌面分辨率成了一项难题。用谷歌、用百度,总算找到了一个在远程终端修改分辨率的方法,在此记录:修改DISPLAY环境变量由于通过远程终端登录,DISPLAY环境变量不是指向GPU输出的终端,我们可以手动修改DISPLAY环境变量,以达到在当前远程终端上控制GPU输出的目的,在单显卡单显示器的场...
2018-12-23 19:10:25
3392
1
原创 Centos7.3搭建Samba服务器
1. 安装Samba$ yum install samba samba-client samba-common 2. 启动Samba服务查看Samba服务运行状态$ systemctl status smb.service此时Samba状态显示为&quot;disable&quot;,接下来我们启动Samba服务。启动Samba$ systemctl start smb.service...
2018-12-16 17:16:20
1785
原创 C编程的预处理技巧
1. 宏定义中的特殊符号1.1 “#”符号&amp;amp;amp;amp;quot;#&amp;amp;amp;amp;quot;的作用是将宏参数转为字符串常量。#define STRING(argument) #argumentchar *p = STRING(hello);将宏STRING展开:char *p = &amp;amp;amp;amp;quot;hello&amp;amp;amp;amp;quo
2018-11-24 17:52:23
1100
原创 linux环境下交叉编译arm架构jpeglib
1. 官网下载jpeglib源码下载地址http://www.ijg.org/选择目前最新的版本jpegsrc.v9c.tar.gz2. 配置$ ./configure --prefix=~/tool/jpeg/ --host=arm-linux CC=arm-linux-gcc参数说明:–prefix指定安装目录,如果不指定则默认安装在/usr/local/目录下–hos...
2018-11-10 11:03:42
2056
原创 VirtualBox报错“kernel driver not installed(rc=-1908)”
软件环境: Ubuntu16.04 VirtualBox5.1.34 安装VirtualBox在打开虚拟机时出现如下错误提示: 先按照提示用root权限执行modprobe vboxdrv重新加载模块,却又提示无法找到vboxdrv模块, 于是尝试重新安装软件包virtualbox-dkms:$ sudo apt install --reinstal...
2018-04-06 19:13:51
9700
原创 Ubuntu安装/卸载命令笔记
联网安装$ sudo apt-get install package安装本地deb包$ sudo dpkg -i package.deb卸载$ sudo apt-get remove package$ sudo dpkg -r package卸载&amp;清除配置文件$ sudo apt-get remove --purge pack...
2018-03-13 10:24:24
2674
原创 git使用简要笔记
1. 使用ssh协议连接github生成ssh公钥$ ssh-keygen生成的公钥文件为: ~/.ssh/id_rsa.pub在github中添加公钥 进入github网站-》点击Settings-》点击SSH and GPG Keys-》点击New SSH key,将id_rsa.pub中的内容复制其中克隆远程仓库$ git clone git@github...
2018-03-09 15:57:05
294
原创 shell命令:暂停进程执行
挂起进程并放入后台$ ctrl+z查看后台进程$ jobs使第N个任务在后台运行(N为jobs显示的进程编号,如bg、fg命令不带参数%N则默认对最后一个进程操作)$ bg %N使第N个任务在前台运行$ fg %N
2017-06-08 10:36:26
4095
原创 gpio_request()简单分析
一、软件环境Andorid Version:5.0Cpu & Arch:Intel X86_64二、File Pathinclude/linux/gpio.hinclude/asm-generic/gpio.hdrivers/gpio/gpiolib.c三、代码分析 int gpio_request(unsigned gpio, const
2015-01-28 10:38:00
16293
1
空空如也
android为什么将ro.sf.lcd_density的值改大,图标会变大
2015-02-11
TA创建的收藏夹 TA关注的收藏夹
TA关注的人