- 博客(20)
- 收藏
- 关注
原创 进程之间通讯-------------UNIX域通信
进程之间的通讯使用很频繁,在本地主机上两个不同的进程之间需要通讯时,我们可以采用unix域套接字来通讯,虽然因特网域套接字也可以达到同一目的,但是unix域套接字效率更高,主要体现如下:(1)UNIX域套接字仅仅复制数据(2)不像因特网域的套接字,它不需要处理协议,不需要产生顺序号,不需要发送确认报文,不需要添加或者删除网络头部,无需计算校验和。UNIX域套接字用于同一台主机上的进程间通讯时,提供...
2018-07-13 16:46:15
335
原创 进程之间通讯------------有名管道
上篇博客写到了无名管道,但是仅限于父进程和子进程之间;本片文章介绍有名管道,有名管道和无名管道使用类似,使用的API如下创建好有名管道后,在使用之前都必须打开管道,在linux中一切都是文件的哲理思想在这里又出现了,打开的时候可以设置阻塞或者非阻塞,但是有一点需要,当管道两端读写之中有任何一个设置为非阻塞时,必须保证阻塞的那个进程先运行,否则程序会崩溃,这一点也是有名管道使用的难点。本示例演示的是...
2018-07-13 16:45:31
259
原创 进程之间通讯------无名管道
进程之间常用的通讯方式有:(1)无名管道(具有亲缘关系的父子进程)(2)有名管道(任意两个进程)(3)信号(4)消息队列(5)内存共享(6)信号量(一般是进程之间同步的手段,一般配合互斥锁、条件变量一起使用)(7)socket套接字现在介绍最简单的无名管道,用到的API函数如下:比较简单,我们可以定义一个数组pipe_fd[2]来表示管道的两端,其中pipe_fd[0]是从管道读取数据,pipe_...
2018-07-13 16:44:54
271
原创 openwrt下的ikg包的制作
把nmap移植好之后,拷贝到开发板,测试也可以使用,但是有个问题,每次使用时,都需要把可执行文件和相关的依赖库拷贝到目标板,这样有点麻烦,有没有更好的方法呢?在查阅资料之后,发现可以把nmap执行文件和相关的库制作成ipk包,这样只需要在openwrt下使用opkg命令安装ipk就可以了,ipk包的制作方法可以参考下面的这位网友openwrt下ipk生成过程及原理 https://blog.csd...
2018-07-13 16:44:07
544
原创 ubus库包使用
上一篇文章介绍了移植ubus相关的库包,本篇文章来验证移植的库包是否正确。编译平台:Ubuntu 14.04目标板平台:mt7688代码的主要目录如下:include、libs、Makefile、src其中,include存放的是所移植的库包的头文件libs存放的是移植的库包的动态库src下存放的测试源码.c/.cpp,我这里比较简单,主要是为了测试ubus的功能,所以就2个源文件Makefile...
2018-07-13 16:43:15
539
原创 ubus移植到openwrt
最近在研究openwrt下的ubus的使用,在使用之前,需要进行相关软件包的移植,在移植过程中遇到了一些问题,在此记录下,有需要的朋友可以参考下。本文主要移植的软件包有libjson-c,libubox,libuv,ubus,下面依次来进行移植。系统环境:Ubuntu 14.04 LTS软件包源码:json-c-0.12.1-nodoc.tar.gz交叉编译环境:misel-openwrt-lin...
2018-07-13 16:42:20
1266
转载 linux知识梳理
学习linux有段时间了,其中涉及的知识点很多,将学习中记录下的知识整理下; 1、Makefile相关知识,这是一个连载的文章,感觉很不错!参考链接:http://blog.youkuaiyun.com/haoel/article/details/2886 2、公司用的产品是基于openwrt开发的,要增加相应的软件包,参考链接:http://blog.youkuaiyun.com/sevenjoin/article
2017-07-17 17:18:18
310
转载 linux的中断机制
1、中断的基本知识点 每个cpu都有若干个中断向量,中断向量按照类型分类,可以分为:异常和中断。异常又可以分为故障和陷阱,它们的特点是不采用中断控制器,也不能被屏蔽;中断可分为:可屏蔽和不可屏蔽,由I/O设备引起的中断属于可屏蔽中断,cpu内部硬件引起的中断属于非屏蔽中断。 2、外部可屏蔽中断 以Intel x86平台为例,是采用2片8259A中断控制器来响应外部中断源。每一片控制8个中断源
2017-06-22 09:37:49
460
原创 内核源码--------mm_init_cpumask(&init_mm);
回到start_kernel,来看函数mm_init_cpumask(&init_mm),从表面意思,可以猜出是初始化内存的,先看看init_mm这个变量是怎么来的?,定位到init_mm struct mm_struct init_mm = { .mm_rb = RB_ROOT, .pgd = swapper_pg_dir, .mm_users = ATOMIC_INIT(2),
2017-06-15 10:54:48
2034
原创 内核源码--------page_address_init();
回到start_kernel,进入到函数page_address_init();定位到该函数 void __init page_address_init(void) { int i; for (i = 0; i { INIT_LIST_HEAD(&page_address_htable[i].lh); spin_lock_init(&page_address_htable[i].l
2017-06-15 10:43:52
856
原创 内核源码--------boot_cpu_init();
继续回到start_kernel,来到函数boot_cpu_init();定位到该函数 static void __init boot_cpu_init(void) { int cpu = smp_processor_id(); /* Mark the boot cpu "present", "online" etc for SMP and UP case */ set_cpu_onli
2017-06-15 10:26:13
2157
原创 内核源码--------debug_objects_early_init()
回到start_kernel,进入到debug_objects_early_init() void __init debug_objects_early_init(void) { int i; for (i = 0; i raw_spin_lock_init(&obj_hash[i].lock); for (i = 0; i hlist_add_head(&obj
2017-06-14 16:04:31
1715
原创 内核源码--------smp_setup_processor_id()
回到start_kernel函数,进入到smp_setup_processor_id()中, void __init smp_setup_processor_id(void) { int i; u32 mpidr = is_smp() ? read_cpuid_mpidr() & MPIDR_HWID_BITMASK : 0; u32 cpu = MPIDR_AFFINITY_LEVEL
2017-06-14 15:41:56
2272
原创 内核源码--------set_task_stack_end_magic(&init_task)
经过bootloader的引导作用,进入到内核的入口,进入start_kernel函数之后,set_task_stack_end_magic(&init_task)函数设置整个系统的第一个进程。其中,init_task这个变量是在init/init_task.c中,从函数struct task_struct init_task = INIT_TASK(init_task)可知,init_task这
2017-06-14 15:12:52
2918
原创 2013.04-rc2uboot移植(建立编译模板)
学习了2个多月的uboot移植,期间经历了很多,移植的平台是飞凌的ok6410A开发板,再此记下移植过程中的笔记,供给网友参考。从uboot网站下载u-boot-2013.04-rc1.tar.bz2 1、解压源码文件,得到u-boot-2013.04-rc1文件夹 2、精简uboot源码文件,删除无关的文件。进入根目录下的board目录,删除除了samsung目录以外的所有文件,仅保留sam
2017-04-11 12:23:53
687
原创 Python的继承和多态
在学习python,和其它语言类似,python也支持继承和多态。在OPP程序编程的时候,我们在定义一个class时,可以从一个现有的class继承,新定义的这个class称为子类,原来的class称为父类、基类、超类。 class Father(object): def run(self): print ''Father is running" 现在从Father继承一个类 class
2017-03-29 10:09:58
740
原创 Python的面向对象编程
面向对象编程心得: 1、面向对象编程的思想是把对象作为基本单元,一个对象包含数据和数据的操作方法 2、编程时,要先定义类,并初始化实例,最后执行对象的操作方法就可以了 例如,要打印学生的成绩单,可以先定义Stuent类,Stuent类包含两个属性,即name和score两个属性,再定义个操作方法,即print_score函数,即完成了编程。 class Stuent (self,name,
2017-03-29 09:31:44
283
转载 深入浅出嵌入式底层软件开发
1.1 ARM CPU寄存器 ARM的汇编编程,本质上就是针对CPU寄存器的编程,所以要搞清楚ARM有哪些寄存器;ARM寄存器分为两类:普通寄存器和状态寄存器;普通寄存器一共有16个,分别为R0——R15,状态寄存器有2个,分别为CPSR和SPSR。 R15别名PC(program Counter),中文称程序计数器,它的值是当前正在执行的指令在内存中的位置,而当指令执行结束后,CPU
2017-02-23 09:26:23
7842
原创 u-boot源码下载地址和内核源码下载地址
最近在学习ok6410,总是要找u-boot源码,把他放到博客中来,就不用每次都找了,后面还会把内核源码链接也放进来,有需要的朋友可以参考下。u-boot源码链接:ftp://ftp.denx.de/pub/u-boot/
2017-02-14 15:45:12
588
转载 Linux网卡驱动-内核网络分层分析
Preface Linux内核对网络驱动程序使用统一的接口,并且对于网络设备采用面向对象的思想设计。 Linux内核采用分层结构处理网络数据包。分层结构与网络协议的结构匹配,既能简化数据包处理流程,又便于扩展和维护。 内核网络结构 在Linux内核中,对网络部分按照网络协议层、网络设备层、设备驱动功能层和网络媒介
2017-02-14 11:13:48
406
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅