<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[huifeidedabian的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/huifeidedabian</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; huifeidedabian]]></copyright><item><title><![CDATA[DS5使用--add-symbol-file]]></title><link>https://blog.csdn.net/huifeidedabian/article/details/127228853</link><guid>https://blog.csdn.net/huifeidedabian/article/details/127228853</guid><author>huifeidedabian</author><pubDate>Sun, 09 Oct 2022 16:46:09 +0800</pubDate><description><![CDATA[无]]></description><category></category></item><item><title><![CDATA[VI 使用技巧]]></title><link>https://blog.csdn.net/huifeidedabian/article/details/126968133</link><guid>https://blog.csdn.net/huifeidedabian/article/details/126968133</guid><author>huifeidedabian</author><pubDate>Wed, 21 Sep 2022 10:44:31 +0800</pubDate><description><![CDATA[VI 使用进阶]]></description><category></category></item><item><title><![CDATA[Android/Linux内存常用命令]]></title><link>https://blog.csdn.net/huifeidedabian/article/details/118736479</link><guid>https://blog.csdn.net/huifeidedabian/article/details/118736479</guid><author>huifeidedabian</author><pubDate>Wed, 14 Jul 2021 20:27:51 +0800</pubDate><description><![CDATA[一 、常用命令

vmstat
proc/meminfo
dumpsys meminfo
procrank (system/extras/procrank/procrank.cpp)
procmem
proc/slabinfo
sys/kernel/debug/ion/heaps/ (ion 相关)
proc/buddyinfo
/proc/pagetypeinfo
/proc/vmallocinf
/proc/sys/vm/*
/proc//maps及/proc//smaps更详细展示了进程VMA的分布情]]></description><category></category></item><item><title><![CDATA[page compaction 基础知识]]></title><link>https://blog.csdn.net/huifeidedabian/article/details/117673037</link><guid>https://blog.csdn.net/huifeidedabian/article/details/117673037</guid><author>huifeidedabian</author><pubDate>Mon, 07 Jun 2021 20:16:09 +0800</pubDate><description><![CDATA[一、 查看当前系统当前碎片化的情况


cat /proc/buddyinfo
This file is used primarily for diagnosing memory fragmentation issues. **cat


/proc/pagetypeinfo
The pagetypinfo begins with information on the size of a page block. It
then gives the same type of information as bu]]></description><category></category></item><item><title><![CDATA[Hot and cold pages]]></title><link>https://blog.csdn.net/huifeidedabian/article/details/117286417</link><guid>https://blog.csdn.net/huifeidedabian/article/details/117286417</guid><author>huifeidedabian</author><pubDate>Wed, 26 May 2021 11:53:09 +0800</pubDate><description><![CDATA[void __free_pages(struct page *page, unsigned int order)
{
	if (put_page_testzero(page)) {//检查页框是否还有进程在使用，就是检查_count变量的值是否为0
		if (order == 0) //如果是1个页框，则放回每CPU高速缓存中
			free_hot_cold_page(page, false);
		else  //如果是多个页框，则放回伙伴系统
			__free_pages_ok(page, ord]]></description><category></category></item><item><title><![CDATA[Page migration]]></title><link>https://blog.csdn.net/huifeidedabian/article/details/117231923</link><guid>https://blog.csdn.net/huifeidedabian/article/details/117231923</guid><author>huifeidedabian</author><pubDate>Mon, 24 May 2021 20:46:12 +0800</pubDate><description><![CDATA[网址：https://www.kernel.org/doc/html/latest/vm/page_migration.html
Page migration allows moving the physical location of pages between nodes in a NUMA system while the process is running. This means that the virtual addresses that the process sees do not cha]]></description><category></category></item><item><title><![CDATA[linux kernel-4.9  PageActive  PageLRU等定义]]></title><link>https://blog.csdn.net/huifeidedabian/article/details/117230852</link><guid>https://blog.csdn.net/huifeidedabian/article/details/117230852</guid><author>huifeidedabian</author><pubDate>Mon, 24 May 2021 20:20:44 +0800</pubDate><description><![CDATA[code path：https://elixir.bootlin.com/linux/v4.9.269/source/include/linux/page-flags.h
PAGEFLAG(Active, active, PF_HEAD)
 __CLEARPAGEFLAG(Active, active, PF_HEAD)
TESTCLEARFLAG(Active, active, PF_HEAD)

#define PAGEFLAG(uname, lname, policy)					\
	TESTPAGE]]></description><category></category></item><item><title><![CDATA[Linux gup]]></title><link>https://blog.csdn.net/huifeidedabian/article/details/117221026</link><guid>https://blog.csdn.net/huifeidedabian/article/details/117221026</guid><author>huifeidedabian</author><pubDate>Mon, 24 May 2021 11:58:14 +0800</pubDate><description><![CDATA[/**
 * __get_user_pages() - pin user pages in memory
 * @tsk:	task_struct of target task
 * @mm:		mm_struct of target mm
 * @start:	starting user address
 * @nr_pages:	number of pages from start to pin
 * @gup_flags:	flags modifying pin behaviour
 * @pages]]></description><category></category></item><item><title><![CDATA[vmap； kmap ； remap_vmalloc_range ； remap_pfn_range]]></title><link>https://blog.csdn.net/huifeidedabian/article/details/117086528</link><guid>https://blog.csdn.net/huifeidedabian/article/details/117086528</guid><author>huifeidedabian</author><pubDate>Thu, 20 May 2021 18:05:07 +0800</pubDate><description><![CDATA[vmap(). This can be used to make a long duration mapping of multiple physical pages into a contiguous virtual space. It needs global synchronization to unmap.
kmap(). This permits a short duration mapping of a single page. It needs global synchronization, ]]></description><category></category></item><item><title><![CDATA[dump_stack 实现分析]]></title><link>https://blog.csdn.net/huifeidedabian/article/details/116137458</link><guid>https://blog.csdn.net/huifeidedabian/article/details/116137458</guid><author>huifeidedabian</author><pubDate>Sun, 25 Apr 2021 20:36:01 +0800</pubDate><description><![CDATA[1 .lib/dump_stack.c
static void __dump_stack(void)
{
	dump_stack_print_info(KERN_DEFAULT);
	show_stack(NULL, NULL);
}

2 .arch/arm64/kernel/traps.c
void show_stack(struct task_struct *tsk, unsigned long *sp)
{
	dump_backtrace(NULL, tsk);
	barrier();
}

dum]]></description><category></category></item><item><title><![CDATA[v4l2 use V4L2_MEMORY_MMAP方式，driver将buffer 转换为DMA 地址]]></title><link>https://blog.csdn.net/huifeidedabian/article/details/115693583</link><guid>https://blog.csdn.net/huifeidedabian/article/details/115693583</guid><author>huifeidedabian</author><pubDate>Wed, 14 Apr 2021 11:13:26 +0800</pubDate><description><![CDATA[建议使用以下方式进行vb2_queue 进行init
struct vb2_queue *q;
q-&gt;mem_ops = &amp;vb2_dma_sg_memops;

这样 userspace reqbufs 就会使用 vb2_dma_sg_alloc 最终得到的是 struct sg_table *sgt;
[   43.365265]&lt;3&gt;[W](3)[&lt;ffffff800808bb7c&gt;] dump_backtrace+0x0/0x2c0
[   43.366029]]]></description><category></category></item><item><title><![CDATA[linux fork() 函数使用注意问题]]></title><link>https://blog.csdn.net/huifeidedabian/article/details/115677292</link><guid>https://blog.csdn.net/huifeidedabian/article/details/115677292</guid><author>huifeidedabian</author><pubDate>Tue, 13 Apr 2021 20:18:58 +0800</pubDate><description><![CDATA[fork 函数从哪里开始执行

#include &lt;unistd.h&gt;;
#include &lt;sys/types.h&gt;;
main ()

{
       pid_t pid;
       pid=fork();  // 1）从这里开始程序分岔，父子进程都从这一句开始执行一次
       if (pid &lt; 0)
            printf("error!");
       else if (pid == 0)
            printf("chi.]]></description><category></category></item><item><title><![CDATA[v4l2 use V4L2_MEMORY_MMAP方式导出为 DMA BUF fd  方式使用]]></title><link>https://blog.csdn.net/huifeidedabian/article/details/115659723</link><guid>https://blog.csdn.net/huifeidedabian/article/details/115659723</guid><author>huifeidedabian</author><pubDate>Tue, 13 Apr 2021 11:57:36 +0800</pubDate><description><![CDATA[V4L2_MEMORY_MMAP 导出 fd 需要使用  vb2_ioctl_expbuf  (只能使用于VB2_MEMORY_MMAP 方式)。
int buffer_export(int v4lfd, enum v4l2_buf_type bt, int index, int *dmafd)
{
    struct v4l2_exportbuffer expbuf;

    memset(&amp;expbuf, 0, sizeof(expbuf));
    expbuf.type = bt;
 ]]></description><category></category></item><item><title><![CDATA[v4l2 use dma buffer mode]]></title><link>https://blog.csdn.net/huifeidedabian/article/details/115654113</link><guid>https://blog.csdn.net/huifeidedabian/article/details/115654113</guid><author>huifeidedabian</author><pubDate>Tue, 13 Apr 2021 10:21:59 +0800</pubDate><description><![CDATA[user space
		struct v4l2_buffer buf;
		memset(&amp;buf, 0, sizeof buf);
		buf.index = 0;
		buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
		buf.memory = V4L2_MEMORY_DMABUF;
		buf.m.fd = dbuf_fd;
		ret = ioctl(v4lfd, VIDIOC_QBUF, &amp;buf);

kernel
/**
 * __qbuf_d]]></description><category></category></item><item><title><![CDATA[vim 常用命令汇总]]></title><link>https://blog.csdn.net/huifeidedabian/article/details/115393734</link><guid>https://blog.csdn.net/huifeidedabian/article/details/115393734</guid><author>huifeidedabian</author><pubDate>Fri, 02 Apr 2021 10:56:01 +0800</pubDate><description><![CDATA[1 .粘贴复制时，自动换行的关闭
:set paste
不再有自动换行。
:set nopaste
自动换行

2 . linux kernel 80 字符的限制显示
设置超过80长度提示
set colorcolumn=81

3 .

]]></description><category></category></item><item><title><![CDATA[spin_lock 调用 wait_for_completion 出现 KE 分析]]></title><link>https://blog.csdn.net/huifeidedabian/article/details/115016334</link><guid>https://blog.csdn.net/huifeidedabian/article/details/115016334</guid><author>huifeidedabian</author><pubDate>Fri, 19 Mar 2021 21:39:39 +0800</pubDate><description><![CDATA[spinlock_t数据类型，spin_lock(&amp;lock)和spin_unlock(&amp;lock)是加锁和解锁
等待解锁的进程将反复检查锁是否释放，而不会进入睡眠状态(忙等待)，所以常用于短期保护某段代码
同时，持有自旋锁的进程也不允许睡眠，不然会造成死锁——因为睡眠可能造成持有锁的进程被重新调度，而再次申请自己已持有的锁。
wait_for_completion，主要调用wait_for_common，而wait_for_common则主要是将当前线程加入等待队列，然后调用schedul]]></description><category></category></item><item><title><![CDATA[Linux GPIO使用以及debug 方法]]></title><link>https://blog.csdn.net/huifeidedabian/article/details/114062213</link><guid>https://blog.csdn.net/huifeidedabian/article/details/114062213</guid><author>huifeidedabian</author><pubDate>Thu, 25 Feb 2021 09:52:42 +0800</pubDate><description><![CDATA[debug 方法1
cat /sys/kernel/debug/gpio


]]></description><category></category></item><item><title><![CDATA[linux init时初始化中断号]]></title><link>https://blog.csdn.net/huifeidedabian/article/details/113954709</link><guid>https://blog.csdn.net/huifeidedabian/article/details/113954709</guid><author>huifeidedabian</author><pubDate>Mon, 22 Feb 2021 20:42:19 +0800</pubDate><description><![CDATA[[    6.535890]&lt;3&gt;[I](3)OF: of_irq_parse_one: dev=/soc/xxx@12300000, index=0
[    6.536771]&lt;3&gt;[W](3)CPU: 3 PID: 1 Comm: swapper/0 Not tainted 4.9.118+ #356
[    6.537638]&lt;3&gt;[W](3)Hardware name: ATC Inc. AC8x (DT)
[    6.538266]&lt;3&gt;[W]]]></description><category></category></item><item><title><![CDATA[procmem工具使用]]></title><link>https://blog.csdn.net/huifeidedabian/article/details/111327316</link><guid>https://blog.csdn.net/huifeidedabian/article/details/111327316</guid><author>huifeidedabian</author><pubDate>Thu, 17 Dec 2020 20:10:56 +0800</pubDate><description><![CDATA[procmem 工具代码路径
system/extras/procmem
编译生成路径
out/target/product/xxx/system/xbin
3.使用方法
adb root
adb remoiunt
adb push procmem system/xbin
使用
adb shell
xxx:/ # procmem 1888

procmem 介绍
procmem：针对每一个进程具体分析就要使用procmem工具了。
procmem 给出了procrank中VSS、RSS、PSS、USS的每.]]></description><category></category></item><item><title><![CDATA[dma_map_single dma_map_sg理解]]></title><link>https://blog.csdn.net/huifeidedabian/article/details/110915402</link><guid>https://blog.csdn.net/huifeidedabian/article/details/110915402</guid><author>huifeidedabian</author><pubDate>Wed, 09 Dec 2020 09:34:09 +0800</pubDate><description><![CDATA[What memory is DMA'able?
========================

The first piece of information you must know is what kernel memory can
be used with the DMA mapping facilities.  There has been an unwritten
set of rules regarding this, and this text is an attempt to fin.]]></description><category></category></item></channel></rss>