2018年8月14日
摘要: 异常的概念在单片机中也接触过,它的意思是让CPU可以暂停当前的事情,跳到异常处理程序去执行。以前写单片机裸机程序属于前后台程序,前台指的就是mian函数里的while(1)大循环,后台指的就是产生异常后的处理程序。ARM9有以下几种异常模式: ARM架构的异常向量的地址可以是0x00000000,也 阅读全文
posted @ 2018-08-14 15:21 andy_fly 阅读(826) 评论(0) 推荐(0) 编辑
  2018年8月13日
摘要: 在Linux驱动之LED驱动编写已经详细介绍了一个驱动的编写过程,接着来写一个按键驱动程序,主要是在file_operations结构中添加了一个read函数。还是分以下几步说明 1、查看原理图,确定需要控制的IO端口 2、查看芯片手册,确定IO端口的寄存器地址 3、编写驱动代码 4、确定应用程序功 阅读全文
posted @ 2018-08-13 20:58 andy_fly 阅读(3887) 评论(0) 推荐(0) 编辑
摘要: 从上到下,一个软件系统可以分为:应用程序、操作系统(内核)、驱动程序。结构图如下:我们需要做的就是写出open、read、write等驱动层的函数。一个LED驱动的步骤如下: 1、查看原理图,确定需要控制的IO端口 2、查看芯片手册,确定IO端口的寄存器地址 3、编写驱动代码 4、确定应用程序功能, 阅读全文
posted @ 2018-08-13 20:47 andy_fly 阅读(10712) 评论(0) 推荐(1) 编辑
摘要: 目标:在开发板上执行insmod hello.ko能在控制台打印出hello init;接着执行rmmod会在控制台打印出hello exit 建立一个hello模块的步骤如下: 1、建立一个hello.c文件,敲入一下代码 2、建立一个Makefile,填入如下代码,其中KERN_DIR为需要装载 阅读全文
posted @ 2018-08-13 11:30 andy_fly 阅读(539) 评论(0) 推荐(0) 编辑
摘要: Linux内核支持动态的加载模块运行:比如insmod first_drv.ko,这样就可以将模块加载到内核所在空间供应用程序调用。现在简单描述下insmod first_drv.ko的过程 1、insmod也是一个用户进程 2、insmod进程从命令行中读取要链接的模块名字:first_drv.k 阅读全文
posted @ 2018-08-13 10:55 andy_fly 阅读(2201) 评论(0) 推荐(0) 编辑
  2018年8月4日
摘要: 在制作根文件系统之Busybox init进程的启动过程分析中我们知道了制作嵌入的根文件系统需要: 1、Busybox这个UNIX程序集合 2、/ect/inittab这个配置文件 3、/ect/inittab指定的命令或者脚本 4、/dev/console、/dev/null设备节点 5、C库 下 阅读全文
posted @ 2018-08-04 20:36 andy_fly 阅读(1146) 评论(0) 推荐(0) 编辑
摘要: 先来介绍一下什么是Busybox:它是将众多的UNIX命令集合进一个很小的可执行程序中。 在制作根文件系统之内核如何启动init进程中遗留了一个问题是/linuxrc是内核启动的第一个应用程序,那么它是什么?我们看到移植好的根文件系统环境,输入ls -al /linuxrc。可以看到: /linux 阅读全文
posted @ 2018-08-04 19:57 andy_fly 阅读(1572) 评论(0) 推荐(0) 编辑
摘要: start_kernel其实也是内核的一个进程,它占用了进程号0,start_kernel的内容简写如下: 它的主要意思就是打开控制台设备,然后找到init进程,然后执行。其中execute_command的值在Linux移植之tag参数列表解析过程分析已经分析过,它的值就是Uboot传入的init 阅读全文
posted @ 2018-08-04 15:41 andy_fly 阅读(560) 评论(0) 推荐(0) 编辑
摘要: 在Linux移植之tag参数列表解析过程分析中已经将内核传入的各个参数的处理过程大概的讲述了。root=/dev/mtdblock3参数的解析分析到最后发现它被存储在了saved_root_name中,最后发现是prepare_namespace函数调用了它。调用它的作用是为了挂接根文件系统,什么是 阅读全文
posted @ 2018-08-04 14:10 andy_fly 阅读(786) 评论(0) 推荐(0) 编辑
  2018年8月3日
摘要: 在Linux移植之内核启动过程start_kernel函数简析中已经指出了start_kernel函数的调用层次,这篇主要是对具体的tag参数列表进行解析。 1、内存参数ATAG_MEM参数解析 2、命令行参数ATAG_CMDLINE解析,以传入的命令参数bootargs=noinitrd root 阅读全文
posted @ 2018-08-03 21:36 andy_fly 阅读(2133) 评论(0) 推荐(0) 编辑