linux
文章平均质量分 90
操作系统架构
仅记录自己的一些思考或剽窃别人的一些优秀思考|Random thoughts of an embedded-kernel hacker.
展开
-
volatile
volatile,linux原创 2023-03-13 16:51:52 · 661 阅读 · 0 评论 -
Linux cache and tlb arch
linux cache tlb原创 2023-03-06 18:14:30 · 509 阅读 · 0 评论 -
内存对齐(memory align)
内存对齐原创 2023-01-11 17:09:49 · 5971 阅读 · 0 评论 -
What memory are you: PageAnon() and PageSwapBacked()(关于PG_swapbacked的一些记录)
PG_swapbacked原创 2022-10-13 16:50:49 · 386 阅读 · 0 评论 -
Better active/inactive list balancing(关于kernel shadow entry和refault distance的一些记录)
Kernel shadow entry and refault distance翻译 2022-10-13 16:34:21 · 150 阅读 · 0 评论 -
ARM32 Page Tables
/* SPDX-License-Identifier: GPL-2.0-only //linux/arch/arm/kernel/head.SCopyright © 1994-2002 Russell KingCopyright © 2003 ARM LimitedAll Rights ReservedKernel startup code for all 32-bit CPUs*/#include <linux/linkage.h>#include <linux/转载 2021-10-05 11:38:27 · 482 阅读 · 0 评论 -
linux进程间互斥锁和条件变量
设置进程间共享属性互斥锁和条件变量将该互斥锁和条件变量放到共享内存中public.h#ifndef _PUBLIC_H#define _PUBLIC_H#include <pthread.h>#include <string.h>#include <stdio.h>#include <stdlib.h>#include &...原创 2020-02-18 20:58:46 · 1684 阅读 · 0 评论 -
查看设备树platform总线上的所有节点
#include #include #include #include #include #include #include MODULE_LICENSE("Dual BSD/GPL");MODULE_DESCRIPTION("a simple driver example!");int showdevice(struct device *devp, void *data)原创 2017-04-27 19:03:07 · 1263 阅读 · 0 评论 -
!!用法
c程序中两个感叹号代表什么含义?最近在分析linux下的一个驱动的源代码时,发现有两个连续的!,如下: ret = fusionee_new (fusion_devs[minor], !!(file-> f_flags & O_APPEND), &fusionee); 其中的!!(file-> f_flags & O_APPEND原创 2017-06-17 15:20:17 · 234 阅读 · 0 评论 -
关于内核notifier随笔
/************************************************************************* > File Name: notifierA.c > Author: XXDK > Email: v.manstein@qq.com > Created Time: Tue 11 Jul 2017 12:39:44 PM CST ****原创 2017-07-11 16:47:51 · 345 阅读 · 0 评论 -
4412 ADC驱动示例
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define DEV_NAME "adc"#define ADCCON 0#define ADCDAT 0XC原创 2017-07-12 10:50:40 · 766 阅读 · 0 评论 -
主动分层设计的驱动子系统架构模拟
--------------------------------------------应用层application--------------------------------------------接口层interface--------------------------------------------核心层core-----------------------原创 2017-07-12 14:02:03 · 236 阅读 · 0 评论 -
查看所有设备树节点名称
#include #include #include #include #include #include MODULE_LICENSE("Dual BSD/GPL");MODULE_DESCRIPTION("a simple driver example!");static int mymodule_init(void){ // 获取设备树首节点并遍历 struct d原创 2017-04-27 19:00:06 · 2249 阅读 · 2 评论 -
内核异步式IO(fasync)
应用层#include #include #include #include int fd;void readfile(int sig){ char buf[100] = {0}; read(fd, buf, 100); printf("read: %s\n", buf);}int main(int arg, char **Argv){ if(2 != ar原创 2017-04-25 19:27:57 · 267 阅读 · 0 评论 -
内核轮询式IO(poll-select)
驱动层static ssize_t fifo_read (struct file *f, char __user *p, size_t n, loff_t *off){ int size; if(FIFO.cursize == 0) //let this procss go to sleep wait_event_interruptible(FIFO.readqueue, FIF原创 2017-04-25 19:19:17 · 398 阅读 · 0 评论 -
内核阻塞式IO
static ssize_t fifo_read (struct file *f, char __user *p, size_t n, loff_t *off){ int size; if(FIFO.cursize == 0) //let this procss go to sleep wait_event_interruptible(FIFO.readqueue, FIFO.cur原创 2017-04-25 19:05:34 · 235 阅读 · 0 评论 -
内核并发竞态解决机制
#include #include #include #include #include #include #include #include #include #include #include MODULE_LICENSE("Dual BSD/GPL");MODULE_DESCRIPTION("a simple driver example!");struct原创 2017-04-25 18:56:50 · 288 阅读 · 0 评论 -
从应用层的mmap到驱动层的mmap
应用层#include #include #include #include #include #include int main(int argc, char **argv){ if(2 != argc) { printf("Usage: %s \n", argv[0]); return 0; } int fd = open(argv[1], O_RDWR);原创 2017-04-25 18:32:13 · 741 阅读 · 0 评论 -
阻塞和非阻塞
#include #include #include int main(){ fcntl(0, F_SETFL, O_NONBLOCK); char buf[10]; gets(buf); printf("aaaaaaaaaaaaaa\n");}使用fcntl干预默认操作属性。原创 2017-04-25 18:48:02 · 344 阅读 · 0 评论 -
mmap实现共享内存,采用信号量同步
服务端将数据发送到共享内存段:#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<fcntl.h>#include<sys/types.h>#include<sys/stat.h>#include<sys/mman.h>#i...原创 2017-04-25 18:21:49 · 475 阅读 · 0 评论 -
《深入理解linux静态库与动态库》
/************************************************************************* > File Name: sxyqe.cpp > Author: XXDK > Email: v.manstein@qq.com > Created Time: Sun 24 Sep 2017 06:10:41 PM CST ******原创 2017-09-24 20:48:29 · 621 阅读 · 0 评论 -
二维码解析库zbar+openCV的移植和使用
-----------------------------1. zbar linux-X86平台编译-----------------------------./configure --without-imagemagick --disable-video --without-qt --without-gtk --without-x --without-python --exec-pr原创 2017-09-21 14:53:54 · 2226 阅读 · 3 评论 -
记录一个linux内核链表使用示例
1. 链表文件:#ifndef __ULIST_H__#define __ULIST_H__/* * Simple doubly linked list implementation. * * Some of the internal functions ("__xxx") are useful when * manipulating whole lists rather than...原创 2019-08-29 20:12:08 · 349 阅读 · 0 评论 -
Ubunut16.04开机挂载ext4和ntfs格式的磁盘
具体流程:打开/etc/fstab 添加UUID=511eb7e7-e285-4c3a-abc0-4d8b40169e8e /home/username/DiskA ext4 rw 0 2UUID=4b17b4b3-0bcd-47dc-93e2-0af2739662c8 /home/username/DiskB ext4 rw 0 2UUID=65DF1F195FB62AE1 /hom...原创 2019-04-02 10:53:24 · 933 阅读 · 0 评论 -
关于dd命令一个比较好的解释
Q: What is the difference between the following?dd bs=1M count=128 if=/dev/zero of=testdd bs=1M count=128 if=/dev/zero of=test; syncdd bs=1M count=128 if=/dev/zero of=test conv=fdatasyncdd bs=1M ...原创 2019-03-25 16:56:28 · 675 阅读 · 0 评论 -
记录一个简单的makefile示例
编译共享库####################################### makefile shared library ####################################### set your all envrionment.CC=g++CC_FLAGS=-D_FILELINESRCS=$(wildcard *.cpp */*.cpp)#...原创 2018-11-21 17:51:01 · 181 阅读 · 0 评论 -
epoll IO多路复用器
epoll IO多路复用器IO多路复用存在的意义在于应用程序可以同时监测多个fd的事件,便于单线程处理多个fd,epoll是众多多路复用器的一种,类似的还有select、poll等。服务器程序通常需要具备较高处理用户并发的能力,使用多路复用器意味着可以用一个线程同时处理多个用户并发请求。阻塞:阻塞指的是用户态程序调用系统api进入内核态后,如果条件不满足则被加入到对应的等待队列中,直到...原创 2018-09-29 11:58:39 · 307 阅读 · 0 评论 -
library Interpositioning 库(内插)干预技术
library Interpositioning 库(内插)干预技术:linux 链接器支持库内插干预技术,它允许使用者截获对共享库函数的调用取而代之执行自己的代码,使用库干预机制,可以追踪感兴趣库函数的调用次数,验证和追踪器输入输出值, 或者将其完全替换为一个不同的实现,这在嵌入式平台上非常常见其基本思想是:对要干预的库函数,创建对应的包装函数wrapper function,其原型和目...原创 2018-09-12 16:08:19 · 603 阅读 · 0 评论 -
观察者模式
/************************************************************************* > File Name: publish-subscribe.cpp > Author: XXDK > Email: v.manstein@qq.com > Created Time: Wed 02 May 2018...原创 2018-05-02 17:24:38 · 167 阅读 · 0 评论 -
C++封装SDK的另一种方法(抽象接口和静态方法)
1. 假设一个module 名为ModuleImplement2. 现在要将该模块暴露sdk给客户,我们不想直接将模块实现的头文件暴露出去3. 多态工具+工厂设计模式├── client_test.cpp├── module│ ├── libmodule.so│ ├── ModuleImplement.cpp│ ├── ModuleImplement.hpp│ ...原创 2018-03-26 12:18:14 · 2428 阅读 · 0 评论 -
C++封装SDK的一种方法(接口与实现分离)
1. 假设一个module包含三个sub module SubModuleA,SubModuleB,SubModuleC2. 现在要将该模块暴露sdk给客户,我们不想直接将模块实现的头文件暴露出去3. 可以考虑接口与实现分离的设计模式 ├── module │ ├── module_implement.cpp │ ├── module_implement.hpp ...原创 2018-03-19 19:10:51 · 11508 阅读 · 0 评论 -
C/C++获取shell命令返回值
void kill_wifi_process(void){ FILE* rstream; FILE* wstream; char buf[10] = {0}; string sbuf; rstream = popen("pidof dnsmasq", "r"); fread(buf, sizeof(char), sizeof(buf), rstream); sbuf = buf;原创 2018-01-12 18:10:57 · 1996 阅读 · 0 评论 -
shell脚本示例0
首先明确几个shell脚本变量:a. $0 代表shell 脚本名称b. $1-n 代表传入的参数 从第一个到第n个c. $@ 代表所有参数列表d. $* 代表所有参数列表e. $# 代表传入参数的个数下面学习一段代码:echo -n “Please input a username”read username# 从 /et原创 2017-03-01 19:01:13 · 334 阅读 · 0 评论 -
《IPC之unix domain socket》
1.socket_server.h#ifndef RKIPC_SOCKET_SERVER_H_#define RKIPC_SOCKET_SERVER_H_#include // SocketServer, use to receive message from client// TODO, only support only one connectionclass SocketS原创 2017-11-10 17:46:29 · 361 阅读 · 1 评论 -
块设备框架实例(基于内存模拟)
驱动://---mydisk.c 实现最简功能 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include MODULE_LICENSE("Du原创 2017-05-03 15:28:19 · 537 阅读 · 0 评论 -
open 系统调用分析
应用层调用open 是如何陷入到内核的呢?这里基于glibc2.25 源码来跟踪检索glibc源码库1. 在 /intl/loadmsgcat.c#ifdef _LIBC/* Rename the non ISO C functions. This is required by the standard because some ISO C functions will原创 2017-05-11 16:24:01 · 498 阅读 · 0 评论 -
linux网络通信之tcp
客户端/************************************************************************* > File Name: client.c > Author: 联合作战实验室 > Mail: v.manstein@qq.com > Created Time: Wed 22 Mar 2017 02:47:10 PM CST *原创 2017-03-24 19:52:28 · 224 阅读 · 0 评论 -
linux静态库与共享库
A.静态库的创建与使用:1.通过gcc -c xxdk.c 生成目标文件=> xxdk.o2.通过ar crs -o libxxdk.a xxdk.o 生成静态库 => libxxdk.a3.通过gcc main.c -o main -L. -lxxdk 链接静态库编译,生成可执行文件main4.执行main即可B.动态库的创建和使用:1.通过gcc -c xxdk.c原创 2017-03-14 18:50:19 · 289 阅读 · 0 评论 -
imx6q内核定时器实现led闪烁
/************************************************************************* > File Name: led_drv.c > Author: XXDK > Email: v.manstein@qq.com > Created Time: Sun 12 Mar 2017 07:16:54 AM PDT ******原创 2017-03-12 23:04:41 · 892 阅读 · 0 评论 -
imx6q工作队列实现led闪烁
/************************************************************************* > File Name: led_drv.c > Author: XXDK > Email: v.manstein@qq.com > Created Time: Sun 12 Mar 2017 06:42:42 AM PDT ******原创 2017-03-12 22:09:38 · 344 阅读 · 0 评论