- 博客(29)
- 资源 (20)
- 收藏
- 关注
转载 解释Linux内核源码中的container_of宏及其标准C版本实现
在Linux内核源码文件 include/linux/kernel.h中,定义了container_of宏,源码如下:/** * container_of - cast a member of a structure out to the containing structure * @ptr: the pointer to the member. * @type:
2017-07-31 14:48:13 401
转载 Linux内核中container_of函数详解
在Linux 内核中,container_of 函数使用非常广,例如 Linux内核链表 list_head、工作队列work_struct中。在Linux 内核中有一个大名鼎鼎的宏container_of(),这个宏是用来干嘛的呢?我们先来看看它在内核中是怎样定义的。
2017-07-31 14:46:44 639
原创 vxWorks设置tlb表项
平台说明:vxWorks6.8环境,loongson3a-4核cpu(mips架构)首先说一下我对tlb的理解:tlb就是按照一定的结构(具体的存储的时的结构是什么样子,跟使用的具体平台相关,不同平台的方式可能就不太一样)存储虚拟地址到物理地址的转换的一段存储空间,这段空间设计在cpu里,并且通过cpu中cp0辅助寄存器来进行读写,其中有一点比较特殊的是当cpu选择地址时,对tlb中的内容
2017-07-31 10:29:47 918
原创 一个platform总线型的i2c设备的注册
一首先在板级目录下 arch/mips/platform 定义设备信息static struct resource ls2h_i2c0_resources[] = { [0] = { .start = LS2H_I2C0_REG_BASE, .end = LS2H_I2C0_REG_BASE + 0x8, .flags = IORESOURCE_MEM, },
2017-07-31 07:50:57 567
原创 分析网卡通过i2c总线从e2prom中读取mac地址过程
平台:loongson3A系列CPU+loongson2H桥片的开发板.每个网卡都有一个独一无二的mac地址,一般这个地址就存放在一个e2prom中,这里就是分析一个网卡初始化过程中,怎么从这个e2prom中读取mac地址。首先这里的e2prom和cpu的i2c控制器相连接,也就是说最后访问这个设备时,使用的是i2c总线的驱动。i2c总线的时序这里就不介绍了,大家可以看一个i2
2017-07-25 19:38:06 1406
转载 i2c设置地址计算
I2C总线设备地址:设备地址标识外设在总线上的唯一性,每一个外设都有唯一的设备地址,设备地址由原理图和芯片手册共同定义!CPU通过设备地址来访问到I2C总线上的某个外设!类似"学生的学号"例如:以AT24C02存储器为例:通过查阅芯片手册发现设备地址=01010A2A1A0(去掉R/W位,高位补0),硬件将A2A1A0都接地=》设备地址=01010000=0x50再
2017-07-25 17:52:26 2859 1
原创 修改linux输入命令颜色
要修改后面输入命令的颜色,也就是修改提示符颜色就可以了,这个设置就会影响到输入命令的颜色。最后也就是设置PS1环境变量的内容, 把输入命令设置为白色方法:export PS1='[\[\e[32;1m\](\#) \[\e[34;1m\]\u@\[\e[33;1m\]\h\[\e[31;1m\]\w]\[\e[30;1m\]\[\e[37;1m\]\$'生效的也就是最后那个:
2017-07-25 15:37:18 798
原创 修改linux文件夹颜色
这个配置文件在/etc/DIR_COLORS,在这里修改也可以,之后运行 eval `dircolors /etc/DIR_COLORS` 这里的`符号时那个~键,别输错了。为了生成自己独特的颜色,可以把这个文件拷贝到自己的家目录下 cp /etc/DIR_COLORS ~/.dir_colors这样每次向修改什么,就直接修改.dir_colors文件就可以了。修改目
2017-07-25 15:27:43 732
原创 vim操作-在查找模式中使用寄存器内容
首先可视模式操作有三种1,v 字符可视模式2,V 行可视模式3,ctrl+v 列操作可视模式当要查找一段话或字符串z或和字符时,首先按v键进入字符可视模式,这时可以选择要查找的一段字符串,之后按ayy或者yy也可以,这就把可视模式选中的内容复制到了寄存器0中。在查找模式时这样使用:/(ctrl+r)0 解释一下:这里
2017-07-25 14:38:18 1072
原创 vim和shell交互两种方式
1,在vim的命令行下输入:shell这是就可以进入shell下,执行其他的命令,最后exit退出就可以了2,在使用vim编辑文件时,按下ctrl+z键,就可以把vim放到后台运行,之后跳转到shell执行其他任务,按下fg就可以把vim再从后台拿过来接着执行。
2017-07-25 07:32:23 4526
原创 vim列操作-删除操作
1,ctrl+v 进入列操作模式2,按j选取多行要删除的字符选中要删除字符:3,按下delete键就删除了,并退回到普通模式下
2017-07-25 07:29:04 879
原创 vim列操作-替换
1,ctrl+v 进入列操作模式2,按j可以选择多行(j跳转到下一行)3,选中要替换的字符,之后按下c键,之后输入要替换的字符此时是选中要替换的字符:按下c键之后输入要写入的字符:4,按下esc键,退回到普通模式,替换的字符就会显示出来当按下esc键之后,输入的字符替换到被选中行。
2017-07-25 07:22:31 8809
原创 vim列操作-插入
操作步骤:1,ctrl+v 进入列操作模式2,按j键选取到下一行3,按I(大写的)键进行插入操作,此时在插入模式下4,按esc键,这就显示出了在所有行插入的字符(此时就退回到普通模式了)
2017-07-25 07:12:13 10716
原创 linux脚本实现ssh自动登陆远程桌面
#!/usr/bin/expect set timeout 3#设置超时时间,当超时后还没有获取到期待的命令,expect为flase,脚本继续向下执行spawn ssh wangkai@10.2.5.25#fork一个子进程取执行ssh登陆任务expect "*password*"#截取一个关键字符send "wangkai\r"#发送一个string,\r标识回车intera
2017-07-18 15:10:50 558
原创 linux011中调度算法
/*调度函数*/void schedule(void){ int i,next,c; struct task_struct ** p;/* check alarm, wake up any interruptible tasks that have got a signal *//* *这里检查每个任务的alarm值,如果已经过期,就设置SIGALRM信号,并设置alarm为0.唤
2017-07-14 15:11:38 289
原创 hash算法
1,hash算法的原理 hash算法把每一符号进行一定的算数得到一个hash值,然后根据符号表的入口数量,得到一个离这个数量最近的一个素数(nbucket),以这个素数为长度,组成一个数组(bucket[nbucket])。 查找时每个符号的hash值,对nbucket取余,得到n(n=hash%nbucket),这个n对应于这个hash在bucket数
2017-07-11 07:00:24 353
原创 linux-011文件系统超级块的操作函数(挂载卸载系统)解析
#define set_bit(bitnr,addr)({\register int _res __asm__("ax");\__asm__("bt %2 %3;setb %%al":"=a"(__res):"a"(0),\ "r"(bitnr),"m"(*(addr)));\ __res; \})/*超级块表*/struct super_block super_block[NR_
2017-07-11 00:17:19 815
原创 shellScript之while语句
#!/bin/bashint=1 #注意这里定义变量时,等号两边不能有空格while(( "$int" <= 5))do echo "$int" let "int++"done结果:~/Note/test # ./11_while1.sh 12345
2017-07-10 21:42:20 626
原创 linux-011中位图操作函数(申请释放节点,申请释放block)解析
/*把addr开始一块block地址清0*/#define clear_block(addr) \__asm__("cld\n\t" \ "rep\n\t" \ "stosl" \ ::"a" (0),"c" (BLOCK_SIZE/4),"D" ((long) (addr)):"cx","di")/*把addr中偏移为nr的位置1*/#define set_bit(nr,addr
2017-07-10 18:08:39 581
原创 linux-011文件系统节点操作函数解析
struct m_inode inode_table[NR_INODE]={{0,},};static void read_inode(struct m_inode * inode);static void write_inode(struct m_inode * inode);/*参考sleep_on函数,另一篇文中有说*/static inline void wait_on_ino
2017-07-10 18:04:53 445
原创 linux011文件系统中缓冲区管理函数分析
extern int end;struct buffer_head * start_buffer = (struct buffer_head *) &end;struct buffer_head * hash_table[NR_HASH];static struct buffer_head * free_list;static struct task_struct * buffer_wai
2017-07-10 16:20:00 434
原创 linux011文件系统中按照名字查找节点的算法分析
/* #define NO_TRUNCATE */#define MAY_EXEC 1#define MAY_WRITE 2#define MAY_READ 4static int permission(struct m_inode * inode,int mask){ int mode = inode->i_mode;/*i节点有设备号,但是链接数为0,说明是空的,为已经删除
2017-07-10 14:52:09 544
原创 git创建一个新库之后查看分支,创建本地以及远程库分支操作
按照前文在linux主机上创建了一个git库后,可以拉代本地,并且可以上传,接下来记录一些其他操作。(这创建好后的库)1,查看本地分[(99) guest@Fedora~/test/tmp]$git branch * master其中只有一个分支为master分支。前面的*号表示正在这个分支上2,查看远程分支[(100) guest@Fedora~/te
2017-07-07 14:45:53 972
原创 git push时出错
对象计数中: 3, 完成.写入对象中: 100% (3/3), 203 bytes | 0 bytes/s, 完成.Total 3 (delta 0), reused 0 (delta 0)remote: error: insufficient permission for adding an object to repository database objectsremote: fat
2017-07-07 11:32:56 959
转载 linux下搭建简单的git服务器
这两天沉迷PHP web服务器开发不能自拔,但是php和html、js之类的程序要写一点看一点效果,我是放到Linux云主机上测试的,所以要在xshell上写代码,很麻烦。于是想自己在云主机上搭建一个Git远程仓库,这样我在windows端写代码,写好push一下就能在linux端同步更新,后来我发现我太天真了,因为linux端的git仓库不具备读写能力,里面的文件格式和我们上传上去的不一样,
2017-07-07 11:08:38 290
原创 分析linux011版本中inode节点使用直接块,间接块所能表示的一个文件的大小
inode节点的映射图如下:计算过程:计算一个节点使用直接,一次间接块,二次间接块能表示的文件的大小:前提:每块大小1024字节,每个块号使用32位(4字节)1,直接快:使用直接块时,一个块号表示一个块,也就是1K字节2,一个一次间接块:一个间接块大小为1024,其能记录的块的数量为1024/4(32位)=256,也就是说一个间接块可以记录256个块的地址,也就
2017-07-07 09:43:21 2931
原创 linux-011上文件系统中超级块和inode的使用分析
总的访问线路:超级块inode在磁盘上的分布:超级块结构如下/*磁盘中存储结构*/struct d_super_block { unsigned short s_ninodes; //节点(inode)总数 unsigned short s_nzones; //逻辑块(block)总数 unsigned short s_imap_
2017-07-06 15:07:43 1593
原创 linux-011中休眠函数以及唤醒函数的分析(sleep_on,wake_up)
先看一下代码:void sleep_on(struct task_struct **p){ struct task_struct *tmp; if (!p) return; if (current == &(init_task.task)) panic("task[0] trying to sleep"); tmp = *p; *p = current; current
2017-07-05 10:18:20 1636
原创 git-patch的使用
查看patch:git apply --stat patch.patch查看patch能否干净顺利的应用到当前分支中:git apply --check patch.patch应用patchgit apply --reject patch.patchgit am patch.patchgit am --signoff < patch.patch生成patchgit for
2017-07-04 14:46:11 632
《LINUX内核修炼之道》
2017-10-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人