- 博客(40)
- 资源 (3)
- 收藏
- 关注
原创 多线程的程序设计实例分析
1创建线程:#incluedint pthread_create(pthread_t*tidp,const pthread_attr_t*attr,void*(*start_rtn)(void),void*arg)tidp:线程idattr:线程属性(通常为空)start_rtn:线程要执行的函数arg:start_rtn的参数2编译--因为pthread的库不
2013-05-22 12:49:23
623
原创 linux进程通信实例详解
一管道通信实例分析(1)无名管道pipe_rw.c--创建管道用pipe【1】pipe_fd[2]数组中,pipe_fd[0]-头部-读信号;pipe_fd[1]-尾部-写信号【2】在系统调用fork()钱调用pipe()创建管道,否则子进程将不会继承文件描述符【3】子进程睡眠2秒sleep(2);因为子进程是读的,应父进程先写,所以睡眠2秒,把CPU让给父进程【4】
2013-05-22 09:51:44
812
原创 内核驱动之异常分析
1内核级的程序,总有死机的时候。应用程序编程时,堆栈错误。2oops可以看出内核级的segmentation Fault。如果进行了非法内存访问或执行了非法指令,会得到Seggault信号。3分析步骤(1)错误原因提示。(2)调用栈(对照反汇编代码)(3)寄存器4
2013-05-20 20:47:30
603
原创 内核驱动之proc文件系统
1什么是proc文件系统?实例:通过/proc/meminfo,查询当前内存使用情况。结论:proc文件系统是一种在用户态检查内核状态的机制。2特点:可以用文本编辑程序读取:cat命令,vi程序可以自己编写程序添加一个/proc目录下的文件。文件的内容都动态创建的,并不存在于磁盘上,存在内存中。pwd查看当前目录3功能:创建proc文件struct
2013-05-20 20:45:13
602
原创 内核驱动之Linux系统调度
1系统调用和普通的函数调用区别:系统调用由操作系统内核实现,运行于内核态;普通的函数调用由函数库或用户自己提供,运行于用户态2工作原理:应用程序首先用《适当的值》填充寄存器,然后调用一个《特殊的指令》跳转到内核某一《固定的位置》,内核根据应用程序所填充的固定值来找到《相应的函数执行》3适当的值:系统调用号特殊的质量:在ARM中,是SWI(已经重命名为SVC指令)
2013-05-20 20:43:17
624
原创 内核驱动之Linux进程调度
1学习调度需要掌握哪些知识点?(1)调度策略(2)调度时机(3)调度步骤2调度的发生有两种方式:(1)主动式在内核直接调用schedule(),当进程需要等待资源等而暂停止运行时,会把状态置于挂起(睡眠),并主动请求调度(2)3调度时机(1)current->state=TASK_INTERRUPTIBLE;(2)schedule();被动式(抢
2013-05-20 20:42:10
786
原创 内核驱动之linux进程控制
1程序是代码和数据的可执行映像,是静止的进程:执行中的程序,是动态的。2进程四要素:(1)一段程序供其执行。(2)有进程专用的《内核空间堆栈》。(3)在内核中有一个task_struct数据结构(4)有独立的用户空间。3进程描述在Linux中,线程、进程都使用struct task_struct来表示,它包含了大量描述线程/进程的信息。pid_t p
2013-05-20 20:39:17
593
原创 多线程的基础知识
1使用多线程的理由之一是:节俭,它是轻量级的进程[1]无须在给独立的数据段,代码段,堆栈段[2]线程间无须复杂的通信2启动一个新的进程必须分配给它独立的地址空间建立代码段、堆栈段和数据段。而线程它的这些是共享的。3多个线程可同存于一个进程,就不需要通信方式,只需定义一些变量4多线程接口遵循POSIX线程接口。头文件pthread.h连接时需要使用
2013-05-20 20:27:18
426
原创 进程通信的五个种类
一进程通信概述1为什么进程间需要通信(1)数据传输;--一个进程需要它的数据发送给另一个进程。(2)资源共享;----多个进程之间共享同样的资源(3)通知事件;----一个进程需要向另一个或一组发送信息,通知它们发生了某种事件。(4)进程控制------有些进程希望完全控制另一个进程的执行2linux使用的进程间通信方式包括:管道和有名管道FIFO信号(sign
2013-05-20 20:25:47
876
原创 进程控制原理及程序设计
一进程控制原理1进程是一个具有一定独立功能的程序的一次运行活动。进程是运行着的程序。2特点动态性,并发性,独立性,异步性3状态就绪态,执行态,阻塞态4进程ID-PID父进程ID-PPID启动进程的用户-UID5进程互斥当硬件或软件资源不允许多个进程共同使用时就会产生互斥6临界资源临界区:7进程同步:一组并发进程按《
2013-05-20 20:11:02
607
原创 访问文件之系统调用以及库函数访问
linux系统中,所有打开的文件都对应一个文件描述符,本身是一个非负整数,0-19,so允许每个进程最多能打开20个文件,现在绝大多数的能打开1024个编程总结:(1)main(int argc,char*argv[])//argc是整型,表示实际参数的个数。argv表示字符出指针数据(2)(fd=open(argv[1],O_CREAT|O_RDWR,0755))//如果flag
2013-05-20 20:04:05
743
原创 gcc静态链接与动态链接,gdb test,$^依赖$@目标$<
一GCC学得的知识总结(1)编译链接gcc hello.c -o hello只编译不链接gcc -c hello.c如果出现gcc -c hello.c -o hello;则会报错[root@embedclub gcc]# gcc -c hello -o hellogcc: hello:未使用链接器输入文件,因为链接尚未完成 产生调试信息gcc -g hello.c
2013-05-20 20:00:24
924
转载 信号量/互斥的理解
信号量实现的机制信号量是一种睡眠锁。它是实现同步操作,防止竟态的方式之一。任何进程在对共享数据进行读写操作之前必须获得用来保护共享数据的信号量,否则不能供访问权限,信号量会把这个访问进程放进一个等待队列中(这个等待队列是在信号量初始化过程中被初始化的),然后让其进入睡眠状态。这是处理器重新调度,去执行其他进程的操作。保护共享数据的信号量被释放,被这个信号量放进等待队列的进程会被激活,获得该信号
2013-05-14 19:26:36
565
原创 poll机制的总结分析
在指定时间到达后,并没有程序去唤醒它,那么它将进入休眠,并挂起。 总结一现在来总结一下poll机制:1. poll > sys_poll > do_sys_poll > poll_initwait,poll_initwait函数注册一下回调函数__pollwait,它就是我们的驱动程序执行poll_wait时,真正被调用的函数。2. 接下来执行file->f_op->poll,
2013-05-14 19:21:32
661
转载 Linux中断处理体系结构
参考:http://blog.chinaunix.net/uid-26606708-id-3342309.html一memcpy((void*)vectors, __vectors_start, __vectors_end- __vectors_start); memcpy((void*)vectors + 0x200, __stubs_start, __stub
2013-05-14 19:18:04
536
转载 Makefile:3:***遗漏分隔符。停止
我编写makefile的时候出现了这个问题上网查了查,都说是gcc ,g++ ,rm,cp前面是tab,不是空格我改了两边,都是用tab,但是编译时还是提示出现了错误Makefile:3:***遗漏分隔符。停止我才意识到在getit的编译->首选项:"编辑器"选项页下,有一个"制位表",有一个复选框:插入空格代替制表符(s)若选中的话,编辑器将会以空格代替“制位表”
2013-05-14 19:12:38
1564
转载 kamlloc与vamlloc
kmalloc/kfree,vmalloc/vfree函数用法和区别1.kmalloc kmalloc内存分配和malloc相似,除非被阻塞否则他执行的速度非常快,而且不对获得空间清零.说明:在用kmalloc申请函数后,要清零用memset()函数对申请的内存进行清零。2.kamlloc函数原型:#includeVoid *kmalloc(size_t size,
2013-05-14 18:57:28
914
转载 rmmod chdir no such file or directory
使用 rmmod时候发现如下错误rmmod chdir no such file or directory 我搜索了很多,我安装了busybox,重新配置编译了内核,可还是没解决,也看了别人的一些,可是看不懂,最后找到了下列方法二. 解决方法 建立rmmod.c ,内容如下#include #include #include #include #incl
2013-05-14 18:54:54
808
原创 ps/kill终止led进程
psps可用于查询当前进程和进程号,方便kil kill命令简介一kill -l [信号]-l 显示信号名称列表,这也能在/usr/include/linux/signal.h文件中找到。[root@localhost ~]# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT
2013-05-14 18:47:31
632
原创 开发板的开发环境的搭建过程
boot的操作1清除 make distclean2配置make smdk2440a_config3编译make 4下载 kernel的操作1配置make mini2440_defconfig2make menuconfig需要注意两块:(1)file systems --> Misellaneous
2013-05-05 17:50:06
461
转载 arm-linux-gcc command not found
问题:[c-sharp] view plaincopyprint?sudo tar jxvf cross-2.95.3.tar.bz2 export PATH=$PATH:/usr/local/arm/2.95.3/bin 使用arm-linux-gcc –v 检查交叉编译器安装成功 tar jxvf kernel.tar.bz2
2013-05-05 08:28:26
637
转载 Your display is too small to run Menuconfig!
如果在终端执行 make menuconfig ,显示错误:Your display is too small to run Menuconfig!It must be at least 19 lines by 80 columns.make[1]: *** [menuconfig] Error 1make: *** [menuconfig] Error 2表示终端窗口太小
2013-05-04 16:43:41
804
原创 fs_mini.yaffs2问题系统映像的制作
(1)这将把制作工具 mkyaffsimage 安装到系统的可执行路径/usr/sbin# tar xzvf mkyaffs2image.tgz -C / (2)#tar jxvf fs_mini.tar.bz2 -C /home/embedclub/linux/linux-2.6.32.2该命令将把fs_mini文件系统目录解压到/home/embedclub/linux
2013-04-25 11:34:05
557
转载 "*** 混和的隐含和普通规则
工作环境: fedora14目标平台:s3c2440开发包内核源码目录:开发包内核版本:交叉编译工具:用gcc-3.4.6交叉编译3210内核,执行make命令,会提示"*** 混和的隐含和普通规则。 停止。"的错误。这是由于fedora14的Make工具对低版本内核Makefile一些旧的规则兼容不是很好,只需要修改一下开发包内核原码里的Makefile。对文件/home/l
2013-04-25 11:14:04
645
转载 uImage Image zImage的区别
小知识:zImage 在Linux/arch/arm/boot/里(1)内核编译(make)之后会生成两个文件,一个Image,一个zImage,其中Image为内核映像文件,而zImage为内核的一种映像压缩文件,Image大约为4M,而zImage不到2M。(2)zImage 是ARM Linux常用的一种压缩映像文件,uImage是U-boot专用的映像文件,它是在zImage之
2013-04-25 11:10:02
569
转载 Kernel panic - not syncing: Attempted to kill init!
在解决前先查个小知识:在make menuconfig之前先make mrproper其作用:据说这个是清除原先此目录下残留的.config和.o(object文件),这一步可是一定要的。 VFS: Mounted root (yaffs filesystem) on device 31:3.Freeing init memory: 144KKernel panic
2013-04-25 10:58:17
1096
原创 linux tftp的安装,配置和tftp :timeout// Permission denied问题解决
1、安装tftp服务器需要安装xinetd、tftp和tftp-server 3个软件1)如果能上网,通过yum安装:sudo yum install xinetdsudo yum install tftpsudo yum install tftp-server2)如果不能上网,可以直接安装提供的rpm包:sudo rpm -ivh xinetd-2.3.14-18
2013-04-25 10:49:22
8217
原创 虚拟机和主机,主机和虚拟机,虚拟和板子ping通
在此之前,先插入个小知识:查看主机ip的方法,开始-运行-cmd-ipconfig查看虚拟机ip的方法,终端输入:ifconfig设置sudo ifconfig eth1(0) 192.168.1.113 虚拟机和主机ping 通的方法: 方法一:打开edit--->Virtual Network Editor,这个时候出现一个选择框,选中VMnet0,在下面的VMnet
2013-04-25 10:28:24
856
原创 ***没有规则可以创建***
前提是你在u-boot根目录下make,解决如下:make distcleanmake smdk2440a_configmake成功了 在此我们不得不提到:make clean 和make distclean的区别:make clean仅仅是清除之前编译的可执行文件及配置文件。而make distclean要清除所有生成的文件make distcle
2013-04-25 10:06:23
1594
转载 uboot移植
-boot简介u-boot是德国DENX小组的开发用于多种嵌入式CPU的bootloader程序, u-boot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系统。u-boot除了支持PowerPC系列的处理器外,还能支持MIPS、 x86、ARM、NIOS、XScale等诸
2013-04-25 10:01:41
541
原创 arm-linux-gcc: Command not found
1》下载arm-linux-gcc-4.3.2.tgz2》tar xvzf arm-linux-gcc-4.3.2.tgz -C / 解压缩文件,文件解压后会默认放在当前新建usr/local/arm/4.3.2,所以要用“-C”选项,并加参数 “/”,表示根目录,这样解压后的文件将放在“/usr/local/arm/4.3.2”。3》进行如下的配置操作:1>方法一:
2013-04-25 09:59:56
616
原创 undefined reference to ‘raise’ //make distclean和make clean的作用
第一种原因是: gcc安装的过程中,它的三个库没有安装,具体安装方法到本人博客里的《u-boot》类别里找《安装gcc必须3个库》,第二种原因:(这个我修改了,对我的情况不管用,也许对你的情况管用)不管怎么样,再次配置前,先make distclean。在此了解先make clean和make distclean make根据Makefile编译源代码,连接,生成
2013-04-25 09:55:23
642
转载 安装gcc必须三个库///configure: error: Building GCC requires GMP 4.2+, MPFR 2.3.1+ and MPC 0.8.0+.
起初由于gcc编译老出现错误于是我找到了gcc,并删除了它,可当我要用时出现无gcc compile,于是我又开始了痛苦的安装gcc过程。郑重提出,安装gcc时还要安装它所需要的3个库!!!!!!!!!!!库的下载地址(ftp://gcc.gnu.org/pub/gcc/infrastructure/)1.下载gcc-4.6.1安装包gcc各版本浏览地址:http://ftp.gnu.
2013-04-25 09:32:38
13104
转载 find ,grep的查询是怎么用的
find 路径 -name 文件名(1)匹配表达式1 find 路径 -name filename:要查找的文件名。可以使用通配符“*”,“?”,但要用双引号将文件名引起来 例子:【root@localhost tmp】# find –name “h*” –print 翻译:在当前目录下查找以h开头的文件
2013-04-25 09:15:23
478
原创 tar ,rpm,yum指令
第一种情况源代码的解压与安装指令.tar 解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)———————————————.gz解压1:gunzip FileName.gz解压2:gzip -d FileName.gz压缩:gzip FileName.tar.gz 和
2013-04-24 21:27:46
586
原创 JLINK烧写BIN文件到nand、norflash、SDRAM
第一种情况烧写到nand falsh操作步骤 1连接好jlink,运行J-Link commander speed 12000 //设置TCK为12M,下载程序时会很快2把init.bin下载到内部SRAM去运行,它执行SDRAM的初始化;loadbin e:/init.bin 0 setpc 0 g3然后再下载一个工程u-bo
2013-04-24 21:20:20
1563
转载 uedit32的注册码及DOS/UNIX/MAC转换问题
第一种情况的解决:直接网上找并下载破解版本的 第二种情况的解决:高级-配置,然后点开文件处理,找到DOS/UNIX/MAC处理,把Unix/MAC检车和转换禁用
2013-04-24 20:49:28
985
原创 securtCRT的不能输入/汉字显示成“??”
第一种情况:不能输入的解决方法如下:Session Options -> Connection -> Serial -> Flow Control,将原先选中的 RTS/CTS取消掉,再重新connect开发板,再次连上后,此时就可以从键盘输入了。 第二章情况:不能显示汉字,汉字显示成乱码,显示成??的解决方法如下:(1)在网上看到往往是在securtCrt的sessionOpt
2013-04-24 20:43:59
1766
1
转载 Starting cobbler daemon SERVING!
起初,我因为是因为安装了安装vmware-tools导致的启动不了,于是我进行以下第一次操作:1.在开机的时候按住shift就可以进入grub选择界面;2.在 grub 菜单中按 e 进入编辑状态,将光条移到kernel ... 一行再按e,在该行最后加一个空格和 1或者 3(我的是quiet 1),按enter后,再b启动即可进入字符登录界面。3.用root帐号登录进去后#
2013-04-24 20:21:40
576
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人