-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
142 lines (114 loc) · 10.9 KB
/
Copy pathindex.html
File metadata and controls
142 lines (114 loc) · 10.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"><meta name="author" content="weilaistar"><meta name="renderer" content="webkit"><meta name="copyright" content="weilaistar"><meta name="keywords" content="Hexo"><meta name="description" content=""><meta name="Cache-Control" content="no-cache"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><title>Weilaistar's Blog</title><link rel="stylesheet" href="/css/style.css?v=2018.7.9"><link rel="stylesheet" href="/css/animation.css?v=2018.7.9"><link rel="icon" href="/img/assets/favicon.ico"><link rel="stylesheet" href="https://cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.min.css?version=1.5.6"><!-- scripts--><script>(function( w ){
"use strict";
// rel=preload support test
if( !w.loadCSS ){
w.loadCSS = function(){};
}
// define on the loadCSS obj
var rp = loadCSS.relpreload = {};
// rel=preload feature support test
// runs once and returns a function for compat purposes
rp.support = (function(){
var ret;
try {
ret = w.document.createElement( "link" ).relList.supports( "preload" );
} catch (e) {
ret = false;
}
return function(){
return ret;
};
})();
// if preload isn't supported, get an asynchronous load by using a non-matching media attribute
// then change that media back to its intended value on load
rp.bindMediaToggle = function( link ){
// remember existing media attr for ultimate state, or default to 'all'
var finalMedia = link.media || "all";
function enableStylesheet(){
link.media = finalMedia;
}
// bind load handlers to enable media
if( link.addEventListener ){
link.addEventListener( "load", enableStylesheet );
} else if( link.attachEvent ){
link.attachEvent( "onload", enableStylesheet );
}
// Set rel and non-applicable media type to start an async request
// note: timeout allows this to happen async to let rendering continue in IE
setTimeout(function(){
link.rel = "stylesheet";
link.media = "only x";
});
// also enable media after 3 seconds,
// which will catch very old browsers (android 2.x, old firefox) that don't support onload on link
setTimeout( enableStylesheet, 3000 );
};
// loop through link elements in DOM
rp.poly = function(){
// double check this to prevent external calls from running
if( rp.support() ){
return;
}
var links = w.document.getElementsByTagName( "link" );
for( var i = 0; i < links.length; i++ ){
var link = links[ i ];
// qualify links to those with rel=preload and as=style attrs
if( link.rel === "preload" && link.getAttribute( "as" ) === "style" && !link.getAttribute( "data-loadcss" ) ){
// prevent rerunning on link
link.setAttribute( "data-loadcss", true );
// bind listeners to toggle media back
rp.bindMediaToggle( link );
}
}
};
// if unsupported, run the polyfill
if( !rp.support() ){
// run once at least
rp.poly();
// rerun poly on an interval until onload
var run = w.setInterval( rp.poly, 500 );
if( w.addEventListener ){
w.addEventListener( "load", function(){
rp.poly();
w.clearInterval( run );
} );
} else if( w.attachEvent ){
w.attachEvent( "onload", function(){
rp.poly();
w.clearInterval( run );
} );
}
}
// commonjs
if( typeof exports !== "undefined" ){
exports.loadCSS = loadCSS;
}
else {
w.loadCSS = loadCSS;
}
}( typeof global !== "undefined" ? global : this ) );</script><script src="https://cdn.jsdelivr.net/npm/jquery@3.3.1/dist/jquery.min.js" defer></script><script src="/js/main.js?v=2018.7.9" defer></script><!-- fancybox--><link rel="preload" href="https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.2.5/jquery.fancybox.min.css" as="style" onload="this.onload=null;this.rel='stylesheet'"><script src="https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.2.5/jquery.fancybox.min.js" defer></script><!-- busuanzi--><script async src="//dn-lbstatics.qbox.me/busuanzi/2.3/busuanzi.pure.mini.js"></script><meta name="generator" content="Hexo 8.1.1"></head><body><section class="profile-close" id="cxo-profile"><div class="profile-avatar"><i class="fa fa-caret-left"></i><img src="/img/OIP.png"></div><!--.profile-saying
i.fa.fa-comment
.saying--><div class="cxo-profile-inner"><div class="profile-name">weilaistar</div><div class="profile-signature">for me</div><div class="read-progress"></div></div></section><header id="cxo-intro" style="height: 70vh;background-image: url(/img/intro/index-bg.png);"><nav id="cxo-intro-nav"><section><div class="intro-nav-title"><a href="/">Weilaistar's Blog</a></div><div class="intro-nav-label-box"><a href="/">Home</a><a href="/about/">About</a><a href="/archives/">Archives</a><a href="/tags/">Tags</a></div><i class="fa fa-bars intro-nav-menu"><div class="intro-nav-drop"><a href="/">Home</a><a href="/about/">About</a><a href="/archives/">Archives</a><a href="/tags/">Tags</a></div></i><div class="clear"></div></section></nav><h1>Weilaistar's Blog</h1><h5>Welcome to my Blog!</h5><div class="intro-social"><a class="fa fa-envelope" href="mailto:guoqing_tang@mail.ustc.edu.cn" title="email"></a><a class="fa fa-github" href="https://github.com/weilaistar" target="_blank" title="github"></a><a class="fa fa-weibo" href="//www.weibo.com" target="_blank" title="weibo"></a><a class="fa fa-facebook" href="//www.facebook.com" target="_blank" title="facebook"></a><a class="fa fa-twitter" href="//twitter.com" target="_blank" title="twitter"></a><a class="fa fa-rss" href="/atom.xml" target="_blank" title="rss"></a></div></header><article class="cxo-up" id="cxo-content-outer"><section id="cxo-content-inner"><section id="recent-posts"><div class="recent-post-item"><div class="post-title"><a href="/2025/12/03/Linux%E5%B9%B3%E5%8F%B0%E8%AE%BE%E5%A4%87%E9%A9%B1%E5%8A%A8%E6%A1%86%E6%9E%B6%E6%B5%85%E6%9E%90/">Linux平台设备驱动框架浅析</a></div><div class="post-time"><i class="fa fa-table"></i><time datetime="2025-12-03T01:55:00.000Z">2025-12-03</time></div><div class="recent-post-content">
最近在学习一些Linux系统下的驱动框架,从传统的字符设备驱动(局限于某个平台的某个设备的某个驱动),到实现设备和驱动分层和分离的框架(这部分是想将驱动变成一个相对普适的框架,并配套一个适合自己单板的具体驱动,反正就是想要把具体的驱动更具体,能够普适的做成框架,体现面向对象的思想),再到后面的支持不同硬件平台的设备驱动框架,最后应该就是设备树实现硬件拓扑了。
Linux平台驱动框架(Platform Driver Framework)是Linux内核中用于管理和支持各种平台设备(如嵌入式设备、SoC等)的一种机制。本文将对Linux平台驱动框架进行浅析,介绍其基本概念、工作原理以及如何编写 ...</div><div class="recent-post-tags"><a class="post-tag fa fa-tag" href="javascript:void(0)" date-tags="Linux"> Linux</a><a class="post-tag fa fa-tag" href="javascript:void(0)" date-tags="驱动框架"> 驱动框架</a><a class="post-tag fa fa-tag" href="javascript:void(0)" date-tags="设备驱动"> 设备驱动</a></div><div class="read-more"><a class="more" href="/2025/12/03/Linux%E5%B9%B3%E5%8F%B0%E8%AE%BE%E5%A4%87%E9%A9%B1%E5%8A%A8%E6%A1%86%E6%9E%B6%E6%B5%85%E6%9E%90/#more">ReadMore</a></div><hr></div><div class="recent-post-item"><div class="post-title"><a href="/2025/12/01/Linux%E4%B8%AD%E5%86%85%E5%AD%98%E6%98%A0%E5%B0%84%E4%B8%8E%E8%A7%A3%E6%98%A0%E5%B0%84%E5%87%BD%E6%95%B0/">Linux中内存映射与解映射函数</a></div><div class="post-time"><i class="fa fa-table"></i><time datetime="2025-12-01T11:17:33.000Z">2025-12-01</time></div><div class="recent-post-content">
在Linux中,内存映射(mapping)和解映射(unmapping)是管理虚拟内存与物理内存之间关系的关键机制。本文将介绍Linux中常用的内存映射与解映射函数及其工作原理。
用户空间的映射与解映射mmap()mmap() (memory map)是一个系统调用,用于在调用进程的虚拟地址空间中创建一个新的映射。其作用如下:
提高I/O效率:将一个文件或设备映射到内存,使得程序可以像访问内存一样访问文件内容,无需显示调用read或write函数(无需缓冲区来回拷贝)。
共享内存:允许多个进程共享同一块内存区域,便于进程间通信。
匿名映射:可以创建没有关联文件的内存映射区域 ...</div><div class="recent-post-tags"><a class="post-tag fa fa-tag" href="javascript:void(0)" date-tags="Linux"> Linux</a><a class="post-tag fa fa-tag" href="javascript:void(0)" date-tags="内存管理"> 内存管理</a><a class="post-tag fa fa-tag" href="javascript:void(0)" date-tags="内存映射"> 内存映射</a></div><div class="read-more"><a class="more" href="/2025/12/01/Linux%E4%B8%AD%E5%86%85%E5%AD%98%E6%98%A0%E5%B0%84%E4%B8%8E%E8%A7%A3%E6%98%A0%E5%B0%84%E5%87%BD%E6%95%B0/#more">ReadMore</a></div><hr></div><div class="recent-post-item"><div class="post-title"><a href="/2025/11/10/How-to-create-personal-blog/">How to create personal blog?</a></div><div class="post-time"><i class="fa fa-table"></i><time datetime="2025-11-10T11:32:33.000Z">2025-11-10</time></div><div class="recent-post-content">
如何用 GitHub 和 Hexo 搭建个人博客?
这是我的第一篇博客,希望能帮助所有像我一样,渴望拥有一个个人博客的朋友。
我们将使用强大的静态博客生成器 Hexo 和免费的代码托管平台 GitHub Pages,在极短的时间内搭建起一个优雅的个人博客。
本地环境准备在本地电脑上,我们需要安装以下基础环境:
软件
作用
检查命令
Node.js
Hexo 运行环境(推荐 LTS 版本)
node -v
Git
版本控制和部署工具
git --version
安装完成后,全局安装 Hexo 命令行工具:
1npm install -g hexo-cli
Hexo ...</div><div class="recent-post-tags"><a class="post-tag fa fa-tag" href="javascript:void(0)" date-tags="github"> github</a><a class="post-tag fa fa-tag" href="javascript:void(0)" date-tags="Blog"> Blog</a></div><div class="read-more"><a class="more" href="/2025/11/10/How-to-create-personal-blog/#more">ReadMore</a></div><hr></div></section><nav class="cxo-page-nav"><span class="page-number current">1</span></nav></section></article><footer id="cxo-footer-outer"><div id="cxo-footer-inner"><p class="footer-container"><span>Site by </span><a target="_blank" rel="noopener" href="http://hexo.io"><span>Hexo</span></a><span> | theme </span><a target="_blank" rel="noopener" href="https://github.com/Longlongyu/hexo-theme-Cxo"><span>Cxo</span></a></p><i class="fa fa-user"> </i><span id="busuanzi_value_site_uv"></span><span> | </span><i class="fa fa-eye"> </i><span id="busuanzi_value_site_pv"></span></div></footer><!-- catelog--><!-- top--><i class="fa fa-arrow-up close" id="go-up" aria-hidden="true"></i></body></html>