- 博客(40)
- 资源 (2)
- 收藏
- 关注
原创 C语言的可变参数函数
open函数有两种声明:int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);疑问:C语言不支持函数重载,怎么可以一个函数名字有两种参数列表呢?在<fcntl.h>中,这样声明:int open (const c...
2019-04-19 14:29:34
227
原创 内存节点初始化
内存节点结构体的定义typedef struct pglist_data { struct zone node_zones[MAX_NR_ZONES]; struct zonelist node_zonelists[MAX_ZONELISTS]; int nr_zones;#ifndef CONFIG_NO_BOOTMEM struct bootmem_data *bdata;#en...
2018-12-27 17:47:29
348
原创 mem_map 分析
文章目录mem_map的作用mem_map的定义dump_stack的输出alloc_node_mem_map源码分析mem_map的作用mem_map的定义/* \linux\mm\memory.c */#ifndef CONFIG_NEED_MULTIPLE_NODES/* use the per-pgdat data instead for discontigmem - mbli...
2018-12-27 17:30:00
3294
原创 min_free_kbytes 的初始化
min_free_kbytes的初始化欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出...
2018-12-27 09:13:20
2738
1
原创 linux 系统启动内存初始化
linux version: 4.9.51 build_all_zonelists_init(void){ __build_all_zonelists(NULL); mminit_verify_zonelist(); cpuset_init_current_mems_allowed();}1 __build_all_zonelists
2018-12-22 19:30:11
434
原创 fork 的内核实现
linux/kernel/fork.c#ifdef CONFIG_CLONE_BACKWARDSSYSCALL_DEFINE5(clone, unsigned long, clone_flags, unsigned long, newsp, int __user *, parent_tidptr, unsigned long, tls, int __user *, chi...
2018-12-13 18:23:51
228
原创 getpid的内核实现
APP:int main(){ int pid; pid = getpid(); printf("[%s %d] pid: %d.\n", __func__, __LINE__, pid); return 0;} 内核入口:\linux\kernel\sys.cSYSCALL_DEFINE0(getpid){ return ...
2018-12-13 08:21:57
1077
原创 sk_rcvbuff 的设定
sk->rcvbuf :当前sock 的读写buf的最大限制(这个值是可以变化的)sk->rmem_alloc :当前sock占据的内存(这个值随着出入队skbuff的出入而变化)sk_forward_alloc:这个值表示一个预分配值,也就是整个tcp协议栈的内存cache,第一次为一个缓冲区分配 buf的时候,我们不会直接分配精确的大小,而是按页来分配,而...
2018-12-06 08:35:21
820
原创 TCP ACK报文中window_size的设定
ACK的调用流程:SyS_recv -- SyS_recvfrom -- inet_recvmsg -- tcp_recvmsg -- release_sock -- __release_sock -- tcp_v4_do_rcv -- tcp_send_ack tcp_select_window 计算window_sizeSyS_recv -- SyS_recvfrom -- i...
2018-12-03 11:43:06
2929
原创 系统调用recv的实现
文件 linux\net\socket.cSYSCALL_DEFINE4(recv, int, fd, void __user *, ubuf, size_t, size, unsigned int, flags)SYSCALL_DEFINE6(recvfrom, int, fd, void __user *, ubuf, size_t, size, un...
2018-11-29 10:52:09
970
原创 linux启动过程中 totalram_pages 的计算过程
1 释放bootmemstart_kernel -- mem_init -- free_all_bootmem/** * free_all_bootmem - release free pages to the buddy allocator * * Returns the number of pages actually released. */unsigned long ...
2018-11-28 10:59:57
2430
原创 linux 系统启动以后,执行脚本的顺序
1 首先是 rcS#! /bin/shexport PATH=/bin:/sbin:/usr/bin:/usr/sbin:.# 挂载虚拟文件系统echo "Mounting virtual filesystems"mkdir -p /sys /proc /devmount -t proc proc /procmount -t sysfs sys /sysif grep -q...
2018-11-26 18:35:19
1004
原创 read(socket) 内核实现
[ 18.043024] [<c0856dfc>] (tcp_recvmsg) from [<c0880964>] (inet_recvmsg+0xa4/0xcc)[ 18.050551] [<c0880964>] (inet_recvmsg) from [<c07e3bcc>] (sock_read_iter+0x9c/0xe0)...
2018-11-21 17:18:01
455
原创 tcp receive data 的三个队列
Prequeue queue: struct tcp_sock { /* Data for direct copy to user */ struct { struct sk_buff_head prequeue; struct task_struct *task; struct msghdr *msg; int memory; int len; } ...
2018-11-21 14:32:19
567
原创 sk->sk_lock.owned 的设定
read的实现[ 45.024721] [<c07e8104>] (lock_sock_nested) from [<c07e8adc>] (sk_wait_data+0xa0/0x120)[ 45.032827] [<c07e8adc>] (sk_wait_data) from [<c085711c>] (tcp_recvmsg+0...
2018-11-21 09:19:28
405
原创 几个重要数据结构的关系
这几个数据结构关联在一起:tcp_sock --> inet_connection_sock --> inet_sock --> sock --> sock_commonstruct tcp_sock { /* inet_connection_sock has to be the first member of tcp_sock */ struct inet...
2018-11-21 08:21:25
375
原创 prequeue 实现
struct tcp_sock { /* Data for direct copy to user */ struct { struct sk_buff_head prequeue; struct task_struct *task; struct msghdr *msg; int memory; int len; } ucopy;};
2018-11-21 08:13:18
178
原创 系统调用accept的实现
linux版本:4.9.51在APP中,connfd = accept(listenfd, (struct sockaddr*)&cli_addr, &clilen);SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr, int __user *, upee...
2018-11-19 09:07:00
532
原创 系统调用listen的实现
linux版本:4.9.51在APP中,listen(listenfd, BACKLOG_SIZE);//The backlog argument defines the maximum length to which the queue of pending connections for sockfd may grow. SYSCALL_DEFINE2(listen, int,...
2018-11-19 08:36:59
311
1
原创 系统调用bind的实现
linux版本:4.9.51在APP中,ret = bind(listenfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr) );int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);SYSCALL_DEFINE3(bind, int, fd,...
2018-11-18 18:37:14
438
原创 系统调用socket 的kernel实现
这个函数初始化socket的主要数据结构:socket --> inodetcp_sock --> inet_connection_sock --> inet_sock --> sock --> sock_common linux版本:4.9.51在APP中, listenfd = socket(AF_INET, SOCK_STREAM, 0);...
2018-11-18 14:52:33
574
原创 sockaddr 套接字地址
内核通过 sockaddr 唯一标识一个socketstruct sockaddr { sa_family_t sa_family; /* address family, AF_xxx */ // 该字段保存特定协议的相关字段。如果是PF_INET,则保存IP地址(struct in_addr)和端口号(port)。 char sa_data[14]; /* 14 bytes of...
2018-11-17 17:50:16
180
原创 inet_create 注释
协议类型,是一个枚举变量,为了看得清晰,我删掉了很多不熟悉的值:enum { IPPROTO_IP = 0, /* Dummy protocol for TCP */#define IPPROTO_IP IPPROTO_IP IPPROTO_ICMP = 1, /* Internet Control Message Protocol */#define IPPROTO_...
2018-11-17 16:10:47
327
原创 inet_protosw 结构
/* This is used to register socket interfaces for IP protocols. */struct inet_protosw { struct list_head list; /* These two fields form the lookup key. */ unsigned short type; /*...
2018-11-17 15:53:14
830
2
原创 inet——proto基本数据结构图
结构体 inet_protosw ,代表了socket的类型(套接字类型和相应的协议):/* This is used to register socket interfaces for IP protocols. */struct inet_protosw { struct list_head list; /* These two fields form the l...
2018-11-17 15:21:14
1697
原创 ubuntu没声音
刚安装的ubuntu 14.04.02,声音正常。过了一会儿,系统所有的声音都没有了。回想自己刚才做的事情,安装了alsa-lib-1.1.2.tar.bz2, alsa-utils-1.1.2.tar.bz2另外的两个表现是:声音设置里面的输出选项:假输出aplay -l: ××××××无效的参数又在网上查了ubuntu没有声音的解决方
2016-12-21 18:00:55
571
原创 Excel VBA 插入指定图片到单元格并只适应大小
Sub 插入图片()Dim filenames As StringDim filefilter1 As Stringfilefilter1 = ("所有图片文件(*.jpg;*.bmp;*.png;*.gif),*.jpg;*.bmp;*.png;*.gif") '所有图片文件后面的括号为中文括号filenames = Application.GetOpenF
2015-10-14 09:44:30
19732
4
原创 Makefile宏定义
起因:阅读linux0.11代码时,发现RAMDISK这个宏定义在makefile中。以前没有接触过这种用法,练习一下。目的:在Makefile中定义的宏,在C语言代码里面使用。Makefile的内容:CC=gccRAMDISK = -DRAMDISK=512all:$(CC) $(RAMDISK) hello.cclean:
2014-12-26 12:13:17
994
原创 Bochs入门
Host操作系统是window xp1 在bochs官网下载最新的bochs安装包,安装bochs软件。第二步 制作img文件。1 安装nasm软件2 写代码boot.asmorg 07c00h ; 告诉编译器程序加载到 7c00 处mov ax, csmov ds, axmov es, axcall DispStr ; 调用显示
2014-09-26 10:41:09
720
原创 DeviceIoControl的返回结果判断
DeviceIoControl的使用不应该以ret来判断DeviceIoControl的结果,而应该以lpBytesReturned。READ操作,lpBytesReturned返回实际读的字节数;WRITE操作,lpBytesReturned返回实际写的字节数。
2014-05-19 17:00:09
1760
原创 一个C语言宏定义错误
#include #include #include #define MACHINE_ID_LEN 30#define INT_SIZE 4#define CHAR_SIZE 1#define KEY_INFO_LEN INT_SIZE + CHAR_SIZE + MACHINE_ID_LEN#define TOTAL_KEYS 1
2014-04-01 16:22:28
1244
原创 uboot添加命令
添加一个简单的命令,yinming,打印helloworld1 common/yinming.c/* * Command for accessing DataFlash. * * Copyright (C) 2008 Atmel Corporation */#include static int do_yinming(cmd_tbl_t *cmdtp, int flag,
2014-02-28 10:10:28
658
原创 安装ltib时遇到的两个问题及解决方法
sudo visudo时,写错了。导致sudo不能使用。解决方法: 重启电脑,bootloader 菜单选择进入高级模式,root用户 此时,文件系统是只读的,不能够修改。mount -o remount rw 就把文件系统改变成了可读写的了。 visudo 把错误的地方删除掉,就OK了。sudo apt-get install l
2014-02-15 09:45:52
672
原创 ubuntu进不去了
ubuntu 桌面版 13.04问题:今天怎么也进不了系统,只能在用户输入密码的界面。解决方法: 进入命令行模式,拷贝了同时的/etc/profile,替换掉。进去了。原因:昨天修改了/etc/profile,不小心改怀了。
2013-09-17 14:39:36
957
原创 vim 安装过程记录
yinming:~/work/mplay$ sudo apt-get install vim [sudo] password for yinming: 正在读取软件包列表... 完成正在分析软件包的依赖关系树 正在读取状态信息... 完成 将会安装下列额外的软件包: vim-runtime //这是依赖包建议安装的软件包: ctags vim-doc
2013-09-14 11:09:14
931
professional_windows_embedded_compact_7.pdf(2)
2013-05-18
professional_windows_embedded_compact_7.pdf
2013-05-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人