自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 移植Linux内核至S3C2440

修改Makefile直接修改顶层目录下的Makefile文件1.修改架构ARCH ?= $(SUBARCH)修改为:ARCH ?= arm2.指定交叉编译工具链直接在上一步后面加上一行CROSS_COMPILE ?= (交叉编译工具链名称)我用的是自己制作的 arm-S3C2440-linux-gnueabi-所以填CROSS_COMPILE ?= arm-S3C24...

2019-08-31 22:55:32 458

原创 Linux驱动:异步通讯

Linux驱动:异步通讯异步通讯的引入还是以按键驱动为例,之前我们写的两个驱动( Linux驱动:POLL机制 和 Linux驱动:外部中断)都是应用程序主动去读按键值,如果没有按键就做休眠等操作。而现在我们使用异步通讯,当有按键值的时候,驱动程序会通知应用程序去读取按键值。这种更加符合系统中断的思想。函数解析sighandler_t signal(int signum, sighand...

2019-04-09 21:25:23 419

原创 Linux驱动:POLL机制

Linux驱动程序:POLL机制POLL机制的引入以我们上一节 按键中断驱动程序为例,整个简易流程图如下:可以看到程序在进入read函数以后,如果没有读到键值,就会一直让进程休眠,等待按键中断唤醒。如果我们在这个基础上引入POLL机制,就可以达到下面的效果:由上面的流程图可以看到,我们引入POLL机制以后,倘若没有按键按下,那么超过多少时间之后,进程能够继续得到执行,而不是没有按键按...

2019-04-09 13:54:11 397

原创 Linux驱动:外部中断

Linux驱动程序:外部中断实验平台内核版本:Linux-4.19.5开发板:SAMSUNG JZ2440主要函数1.中断注册函数函数原型int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev_id)函数参数解析ir...

2019-04-07 17:43:29 1390

原创 Linux环境下使用WIFI模块:使用DHCP工具动态获得IP地址

使用DHCP工具动态获得IP地址实验版本及下载地址DHCP:dhcp-4.4.1.tar.gz链接: [https://www.isc.org/downloads/]编译安装DHCP配置编译选项解压完成后进入DHCP根文件目录,输入配置指令./configure --host=arm-linux ac_cv_file__dev_random=yes --with-randomde...

2019-03-20 16:06:42 2219

原创 Linux环境下使用WIFI模块:使用wpa_supplicant工具配置和连接WIFI

使用wpa_supplicant工具配置和连接WIFI实验版本及下载地址openssl:openssl-1.1.1b链接: [https://www.openssl.org/source/]wpa_supplicant:wpa_supplicant-2.7链接: [http://w1.fi/wpa_supplicant/]安装依赖库openssl配置编译选项./config s...

2019-03-19 16:54:58 18928

原创 Linux环境下使用WIFI模块:使用IW工具配置和连接WIFI

使用IW工具配置和连接WIFI实验版本IW工具版本:iw-5.0.1IW依赖库:libnl-3.2.25安装包下载地址iw :https://mirrors.edge.kernel.org/pub/software/network/iw/libnl :http://www.infradead.org/~tgr/libnl/安装libnl依赖库解压下载好的libnl-3.2.25.t...

2019-03-18 16:59:52 17835 2

原创 Linux环境下使用WIFI模块:WIFI驱动移植

WIFI驱动移植实验平台内核版本:Linux-4.19.5开发板:SAMSUNG JZ2440WIFI模块:Ralink rt3070查看WIFI设备的PID直接将WIFI模块接到电脑的USB插口,然后在windows的设备管理器->网络适配器中可以看到插入的USB-WIFI设备右键属性->详细信息->硬件ID可以看到这款WIFI模块的PID为0x3070。...

2019-03-18 15:44:34 6507

原创 Linux网络编程:简易聊天室

简介这个是我利用当前掌握的知识写的一个小的项目,主要功能就是建立一个服务器,然后让加入该服务器的客户端能跟使用QQ群一样聊天。使用方法下载源码修改server.h中的SERVERPORT,表示服务器要使用的端口,建议使用大于1024的端口。修改client.c中的SERVERPORT和SERVERIP,对应于服务器的端口和IP在项目文件夹下运行make指令,可以生成client和se...

2019-03-06 10:10:03 1083

原创 Linux网络编程:信息转换函数

字节转换函数在网络上面有着许多类型的机器,这些机器在表示数据的字节顺序是不同的, 比如i386芯片是低字节在内存地址的低端,高字节在高端,而alpha芯片却相反. 为了统一起来,在Linux下面,有专门的字节转换函数.unsigned long int htonl(unsigned long int hostlong)unsigned short int htons(unisgned s...

2019-02-22 09:22:26 162

原创 Linux网络编程:简单入门

网络编程基础概念网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的–客户端和服务器端。在网络程序中,如果一个程序主动和外面的程序通信,那么我们把这个程序称为客户端程序。 比如我们使用ftp程序从另外一个地方获取文件的时候,是我们的ftp程序主动同外面进行通信(获取文件), 所以这个地方我们的ftp程序就是客户端程序。 和客户端相对应的程序即为服务端程序。被动的等待外面的程序来和自己...

2019-02-21 17:02:35 228

原创 POSIX多线程笔记(7):信号量(Semaphore)

信号量的概念1965年,E.W.Dijkstra提出了信号量的概念,之后信号量即成为操作系统实现互斥和同步的一种普遍机制。信号量是包含一个非负整型变量,并且带有两个原子操作wait和signal。wait还可以被称为down、P或lock,signal还可以被称为up、V、unlock或post。如果信号量的非负整形变量S大于零,wait就将其减1,如果S等于0,wait就将调用线程挂起。对于...

2019-02-20 10:20:29 797

原创 POSIX多线程笔记(6):读写锁

读写锁的概念在一些程序中存在一个称作读者写者的问题,即对于某些资源的访问,存在两种可能的情况,一种是访问必须是排他的,比如两个进程不能同时改变一个全局变量的数值,称作写操作,另一种是访问可以是共享的,称作读操作。显而易见,这一问题和相应的表述是从对文件的读写操作中引申出来的。在多线程中,有一些公共数据修改的机会比较少,而读的机会却是非常多的,此公共数据的操作基本都是读,如果每次操作都给此段代码...

2019-02-19 20:33:35 386

原创 POSIX多线程笔记(5):信号

信号的概念信号(signal)是向进程发送的软件通知,通知进程有事件发生。引发信号的事件发生时,信号就被生成(generate)了。进程根据信号采取行动时,信号就被传递(deliver)了。信号的寿命(lifetime)就是信号的生成和传递之间的时间间隔。已经生成但还未被传递的信号被称为挂起(pending)的信号。在信号生成和信号传递之间可能会有相当长的时间。传递信号时,进程必须在处理器上运行...

2019-02-19 10:26:01 257

原创 POSIX多线程笔记(4):互斥量与条件变量

2019-02-16 09:33:29 266

原创 POSIX多线程笔记(3):线程特定数据

在单线程程序中,函数经常使用全局变量或静态变量,这是不会影响程序的正确性的,但如果线程调用的函数使用全局变量或静态变量,则很可能引起编程错误,因为这些函数使用的全局变量和静态变量无法为不同的线程保存各自的值,而当同一进程内的不同线程几乎同时调用这样的函数时就可能会有问题发生。而解决这一问题的一种方式就是使用线程特定数据机制。static char str[100]; void A(char* ...

2019-02-12 08:59:06 191

原创 POSIX多线程笔记(2):线程的退出和取消线程

线程退出中exit 和pthread_exit的区别进程的终止可以通过在主函数main()中直接调用exit、return,或者通过进程中的任何其它线程调用exit来实现。在任何一种情况下,该进程的所有线程都会终止。而pthread_exit函数则是使调用改函数的线程中止运行,并且允许线程传递一个指针。它的形式为:void pthread_exit(void *value_ptr) ;连接...

2019-01-31 10:27:56 696

原创 POSIX多线程笔记(1):pthread_detach与pthread_join的区别与应用

概念POSIX线程的一个特点是:除非线程是被分离的了,否则在线程退出的时候,它的资源是不会被释放的。所以POSIX提供了pthread_detach函数用来分离线程:int pthread_detach(pthread_t thread);它设置线程的内部选项来说明线程退出后,其所占有的资源可以被回收。参数thread是要分离的线程的ID。pthread_join函数可以使调用这个函数的线...

2019-01-29 20:34:27 703 3

原创 通用Makefile文件简单入门和编写(4)

通用工程的Makefile编写

2019-01-14 08:50:25 344

原创 通用Makefile文件简单入门和编写(3)

使用GCC编译器自动创建依赖文件的功能假设我们在文件夹下一共有这3个文件//a.c#include <stdio.h>#include "a.h"int main(){ printf("hello, world!\n"); printf("A= %d\n", A); test_fun(); return 0;}//a.h#define A 1//b.c...

2019-01-08 20:38:57 220

原创 通用Makefile文件简单入门和编写(2)

在Makefile中使用变量Makefile文件可以像C一样使用变量。变量的命名字可以包含字符、数字,下划线(可以是数字开头),但不应该含有 : 、 # 、 = 或是空字符(空格、回车等)。变量是大小写敏感的,“foo”、“Foo”和“FOO”是三个不同的 变量名。这里看一个例子:objects = program.o foo.o utils.oprogram : $(objects) ...

2019-01-08 19:42:23 154

原创 通用Makefile文件简单入门和编写(1)

前言在开始之前,我们首先需要了解为什么需要Makefile文件。之前我们学习C语言的时候,是在VC上面编译的,而不管是VC还是keil等单片机开发平台,我们只要点击一个编译按钮,平台工具就能自动帮我们编译和链接成可执行文件,并且它们还能根据文件修改的时间来决定哪些文件需要重新编译,哪些不需要,对于一些非常大的项目或者工程能极大缩短编译时间。而Makefile就是完成类似的任务,一个好的Makef...

2019-01-08 19:04:55 219

原创 JZ2440移植Linux内核4.19.5自带LCD驱动

分析

2018-12-21 08:56:54 1217

原创 Source Insight工程精准导入用到的Linux内核文件

不知道大家在做Linux内核或者驱动相关开发的时候有没有碰到这样的情况,一个最新的Linux内核大约有5万多个文件,我们用Source Insight对内核创建项目工程然后建立链接,会发现一个整个项目有2个G左右的大小,而且在查找函数的调用往往会被其他没有编译进内核的文件所干扰。经过查找我发现了一个能够精准导入内核文件的方法。首先下载文末的shell脚本。放到任意文件夹下。然后运行脚本./...

2018-11-30 15:43:11 2360 1

原创 移植U-BOOT-2016.11到JZ2440详细教程(8)

完善以及裁剪U-bootU-boot移植到这步就马上接近尾声了,这一节我们对U-boot做一些最后的完善。首先看一下开机时候打印出的信息。解决打印出的WARING和ERROR信息几个错误和警告信息都是用同样的套路,先看第一个 “WARNING: Caches not enabled” ,找一下在哪里打印的initr_caches(\common\board_r.c)enable_c...

2018-11-17 14:29:30 834 1

原创 移植U-BOOT-2016.11到JZ2440详细教程(7)

移植U-boot支持DM9000C网卡在U-boot原本的程序里面已经支持了DM9000网卡,但是没有编译进去,所以我们来看一下net目录下的Makefile文件\drivers\net\Makefile,第17行obj-$(CONFIG_CALXEDA_XGMAC) += calxedaxgmac.oobj-$(CONFIG_CS8900) += cs8900.oobj-$(CONFI...

2018-11-16 11:34:04 512

原创 移植U-BOOT-2016.11到JZ2440详细教程(6)

移植U-boot支持Nand Flash根据U-boot打印出的信息,我们发现“NAND:0 Mib”,说明开发板上面的Nand Flash并没有被识别出来,还是跟Nor Flash一个套路,我们查一下在哪里打印出的“NAND:”,然后经过层层的分析,关于Nand Flash这块我们可以得到以下调用关系。initr_nand, 1(\common\board_r.c)nand_init(...

2018-11-15 14:30:01 480

原创 移植U-BOOT-2016.11到JZ2440详细教程(5)

让U-boot支持Nor Flash这节的移植应该是最简单的,修改代码量最少。但是我们还是要对源码进行一个简单的分析。首先紧接上一节最后的那张图,我们已经让U-boot可以从Nand Flash启动,然后打印出来的调试信息中Flash: 对应的就是Nor Flash的大小,NAND: 就是NAND FALSH的大小。这里发现NAND居然能识别出大小,但是如果我换为Nor启动以后,NAND就...

2018-11-13 20:06:10 1647

原创 移植U-BOOT-2016.11到JZ2440详细教程(4)

让U-BOOT支持从NAND FLASH启动在移植之前,我们首先要知道ARM开发板从NAND和NOR FLASH启动有什么区别。关于这块内容的介绍,推荐看一下这个博主的文章,讲的还是蛮具体的,链接: [https://www.cnblogs.com/aaronLinux/p/5540606.html].这边我们只需要知道如果要从NAND FLASH启动,那么我们在对代码重定位之前的程序不能大...

2018-11-12 15:03:48 856 1

原创 移植U-BOOT-2016.11到JZ2440详细教程(3)

让串口正常打印数据一般在移植过程中,我们经常会碰到许多问题,这就需要让开发板给我们一些调试信息,最简单的调试信息就是通过点亮LED实现,但是LED就那么几个,能表示的调试信息少而且不直观,另一种更好的方法则是通过串口打印数据。所以我们在移植U-BOOT过程中一般都先实现串口能正常打印数据。用过UART的人都知道,要想串口正常打印数据,最重要的两点就是时钟和波特率,所以在本章移植中,我们重点就是...

2018-11-06 20:30:29 786

原创 移植U-BOOT-2016.11到JZ2440详细教程(2)

构建一个单板从网上下载U-BOOT程序并解压到任意目录下。加载到U-BOOT根文件目录,输入make smdk2410_config因为U-BOOT对许多单板都做了支持,这个指令表示我们使用的是smk2410单板。当显现如下时,表示配置成功。接着我们输入make发现跳出一大堆错误信息,经过查找发现是不知道从什么版本开始,U-BOOT就不在指定编译器,需要我们手动指定。这里有两个方...

2018-11-02 17:17:08 737

原创 移植U-BOOT-2016.11到JZ2440详细教程(1)

前言学习韦东山老师的移植U-BOOT 2012.04.01已经有一段时间了,一直想着自己来移植最新的U-BOOT,看看是否真正的掌握了移植方法。并通过这个过程,学着写一些自己的博客。至于为什么要选择2016.11版本,而不是最新的2018.09,是因为从U-BOOT 2016.11以后的版本就不再支持S3C2410单板,以目前的能力,我们要移植U-BOOT到开发板上一定是选择当前支持的单板或者...

2018-10-29 17:25:10 1367

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除