自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 资源 (8)
  • 收藏
  • 关注

原创 从零开始之驱动发开、linux驱动(四、字符驱动之led驱动简单使用)

本节在上一节的驱动程序中添加基本硬件操作函数。 这一节我们开始增加一个led灯的驱动程序。 点亮一个led灯只需要两个寄存器,即配置io口的控制寄存器和状态寄存器。基础知识:在linux系统中,开启mmu后,我们不能直接使用寄存器的硬件地址(或者说我们不知道,寄存器硬件地址被映射到那块内存了),所以我们只能使用虚拟地址来操纵寄存器。而目前我们不知道虚拟地址,只知道物理地址。...

2018-08-31 00:37:51 3723 7

原创 从零开始之驱动发开、linux驱动(三、最简字符驱动的使用)

 下面对上一节的驱动程序的open和write函数增加了打印信息,使用时可以看到系统的调用。同时对注册和注销函数也增加了打印信息,使用时可以看到系统的调用。#include <linux/fs.h> /* 包含file_operation结构体 */#include <linux/init.h> /* 包含module_init modu...

2018-08-30 02:49:59 3356

原创 从零开始之驱动开发、linux驱动(二、最简字符驱动详解)

下面是一个最简单的字符驱动程序框架,下面我将一一进行分析里面的内容。#include <linux/fs.h> #include <linux/init.h> /* 定义一个open函数 */static int first_drv_open(struct inode *inodep, struct file *filep){ return 0;...

2018-08-28 22:39:47 6514 2

原创 从零开始之驱动开发、linux驱动(一、驱动基础)

 准备19年在深圳这边找驱动相关的工作了,所以从头开始再学一遍韦东山老师的驱动课程,并做好记录,希望能找到满意的工作。同时该系列的驱动都是在前面新移植的linux3.16.57的基础上工作的。 之前的驱动模型学习和分析,从框架上了解的驱动的组织形式(在4.9的内核的基础上分析的)。https://blog.csdn.net/qq_16777851/article/categor...

2018-08-27 22:28:10 64974 10

原创 从零开始之文件系统制作、根文件系统制作(一、根文件系统制作)

嵌入式根文件系统一般都是使用busybox1.下载https://busybox.net/我没安装git工具,我就直接下载源码了我们就下载一个19.2的版本放入linux系统中某个目录,解压需改顶层Makefilenfs服务器搭建,参考我的这篇文章https://blog.csdn.net/qq_16777851/article/details/8151...

2018-08-26 20:31:38 8696

原创 从零开始之内核移植、移植linux3.16.57内核(一、linux内核移植)

https://www.kernel.org/首先下载内核,先看一下比较新4.x的能不能用我下载了一个4.1.40版本的打开顶层Makefile,搜索找到 CROSS_COMPILE按上图所示,注释掉SUBARCH,修改ARCH和CROSS_COMPILE搜索找到s5pv210_defconfig,然后make 默认配置修改调试串口make menuconfi...

2018-08-25 17:02:56 13203 5

原创 从零开始之uboot、移植uboot2017.01(十、bootm原理分析)

通常我们启动内核是使用bootm命令,所以这里就分析一下内核的启动流程。 基础知识vmlinux、Image、uImage 和zImagekernel镜像格式:vmlinux   vmlinuz是可引导的、可压缩的内核镜像,vm代表Virtual Memory.Linux支持虚拟内存,因此得名vmlinux它是由用户对内核源码编译得到,实质是elf格式的文件.也就是说,vmlin...

2018-08-25 02:43:35 6037 4

原创 从零开始之uboot、移植uboot2017.01(九、网卡移植)

上一节分析了命令的实现我们可以根据自己需要添加一些常用的命令。之前的goni开发板是默认没有使用网卡的,这一节我们尝试移植网卡DM9000在我的板子上。 首先看一下,网络相关的初始化需要哪些宏。网络相关的初始化在board_r.c中,属于uboot的后半部分。#ifdef CONFIG_CMD_NET /* 默认没定义 */ initr_ethad...

2018-08-20 21:55:13 7716 3

原创 从零开始之uboot、移植uboot2017.01(八、命令解析与实现)

终于到了最后的函数了static int run_main_loop(void){#ifdef CONFIG_SANDBOX /* 没定义 */ sandbox_main_loop_init();#endif /* main_loop() can return to retry autoboot, if so just run it again */ for (;;) ...

2018-08-19 01:36:09 12088 3

原创 从零开始之uboot、移植uboot2017.01(七、board_init_r分析)

上一节已经分析到了uboot的board_init_r函数,并且把两个参数传递给它 /* call board_init_r(gd_t *id, ulong dest_addr) */ /* gd的 地址和 当前新的uboot的起始地址传参给board_init_r */ mov r0, r9 /* gd_t */ ldr r1, [r...

2018-08-18 00:22:03 8049 3

原创 从零开始之uboot、移植uboot2017.01(六、uboot的自举分析)

 上一小节已经分析完了 board_init_f的内容,接下来我们从他后面继续分析 mov r0, #0 bl board_init_f#if ! defined(CONFIG_SPL_BUILD) /* 没定义,所以要执行,详细的后面拆分开分析 *//* * Set up intermediate environment (new sp and gd) an...

2018-08-17 00:59:35 4912 1

原创 从零开始之uboot、移植uboot2017.01(五、board_init_f分析)

接着第四节的继续分析,下面的是整个uboot前半部分的核心。/* * entry point of crt0 sequence */ENTRY(_main)/* * Set up initial C runtime environment and call board_init_f(0). */#if defined(CONFIG_SPL_BUILD) &&am...

2018-08-16 02:25:51 7723 3

原创 从零开始之uboot、移植uboot2017.01(四、uboot的重定位)

接着上一节的继续分析和实验 bl gpio_out bl led1_on /* the mask ROM code should have PLL and others stable */#ifndef CONFIG_SKIP_LOWLEVEL_INIT bl cpu_init_cp15#ifndef CONFIG_SKIP_LOWLEVEL_IN...

2018-08-15 01:21:04 5441 1

原创 从零开始之uboot、移植uboot2017.01(三、lowlevel_init)

花了好几个小时,上一节的问题解决了,但具体原因任然不详!改动点很小,就是把进入lowlevel_init,和退出lowlevel_init用的寄存器r11改为了r10(测试改为r9也可以),不知道是编译器的问题,还是什么问题。暂时先保留,继续把移植进行下去。 一、上一节中lowlevel_init中有clock的初始化代码,但没加进去。首先我们加进去。 /* Pen...

2018-08-12 21:28:11 5005 4

原创 上网相关问题总结

1.安装了虚拟机后,笔记本电脑不能上网网卡个数太多,进入网络适配器,把虚拟机的网卡给禁止掉

2018-08-12 19:19:11 372

原创 从零开始之uboot、移植uboot2017.01(二、从入口分析流程)

一、链接脚本/* * Copyright (c) 2004-2008 Texas Instruments * * (C) Copyright 2002 * Gary Jennejohn, DENX Software Engineering, <[email protected]> * * SPDX-License-Identifier: GPL-2.0+ */#incl...

2018-08-11 22:55:20 10964 3

原创 Makefile学习

一、为什么要有MakefileMakefile可以很好的组织和管理程序和文件。特别是对一个大型工程而言,Makefile 关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,Makefile 定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为Makefile 就像一个 shell ...

2018-08-11 19:05:49 2098

原创 从零开始之uboot、移植uboot2017.01(一、移植前的准备)

 手边的是一个S5PV210的开发板,想尝试移植一个比较新的uboot下载最新版本uboot2018. ftp://ftp.denx.de/pub/u-boot/编译器下载http://www.veryarm.com/arm-none-linux-gnueabi-gcc 交叉编译工具链的安装1.在/usr/local/下面创建一个arm的文件夹,把交叉编译工具解压到...

2018-08-10 00:41:38 42757 8

原创 开发常见的linux宿主机问题解决

安装vimsudo apt-get updatesudo apt-get install vim 64位下安装32位库 sudo apt-get install lib32z1 交叉编译工具链的下载(我准备移植比较新的内核、uboot、根文件系统所以用比较新的交叉编译工具链)https://launchpad.net/gcc-arm-embedded/+down...

2018-08-08 23:41:23 1108

原创 linux设备模型九(class)

1. 概述在设备模型中,bus、device、device driver等等,都比较好理解,因为它们对应了实实在在的东西,所有的逻辑都是围绕着这些实体展开的。而本文所要描述的class就有些不同了,因为它是虚拟出来的,只是为了抽象设备的共性。举个例子,一些年龄相仿、需要获取的知识相似的人,聚在一起学习,就构成了一个班级(Class)。这个班级可以有自己的名称(如295),但如果离开构成它的...

2018-08-07 23:37:19 2264

原创 linux设备模型八(bus)

1. 概述在Linux设备模型中,bus(总线)是一类特殊的设备,它是连接处理器和其它设备之间的通道(channel)。为了方便设备模型的实现,内核规定,系统中的每个设备都要连接在一个Bus上,这个Bus可以是一个内部Bus、虚拟Bus或者Platform Bus。内核通过struct bus_type结构,抽象bus,它是在include/linux/device.h中定义的。本文会围绕...

2018-08-07 21:59:35 4113

原创 linux设备模型七(device_driver细节)

阅读这篇之前,建议先阅读我的下面这篇博客了解device_driver的数据结构和大概作用。https://blog.csdn.net/qq_16777851/article/details/81429257了解我的下面这篇博客可以对device部分了解清晰。同时,下面用到了device中相同的接口分析,也会略过。https://blog.csdn.net/qq_16777851/ar...

2018-08-06 23:04:41 5439

原创 linux设备模型六(device细节)

device相关的操作接口:struct device *device_create(struct class *class, struct device *parent, dev_t devt, void *drvdata, const char *fmt, ...);struct device *device_create_vargs(struct class *cl...

2018-08-06 00:19:01 7991 3

原创 linux设备模型五(device和device_driver)

1. 前言device和device driver是Linux驱动开发的基本概念。Linux kernel的思路很简单:驱动开发,就是要开发指定的软件(driver)以驱动指定的设备(device),所以kernel就为设备和驱动它的driver定义了两个数据结构,分别是device和device_driver。因此本文将会围绕这两个数据结构,介绍Linux设备模型的核心逻辑,包括:设备及...

2018-08-05 15:50:40 7676 1

原创 linux设备模型四(attribute)

本博文参考学习自这位博主,其中例子和代码由我添加http://www.wowotech.net/device_model/dm_sysfs.html 1. 前言sysfs是一个基于RAM的文件系统,它和kobject一起,可以将kernel的数据结构导出到用户空间,以文件目录结构的形式,提供对这些数据结构(以及数据结构的属性)的访问支持。sysfs具备文件系统的所有属性,而本文...

2018-08-05 03:06:53 5376

原创 linux设备模型三(uevnet)

1. Uevent的功能Uevent是Kobject的一部分,用于在Kobject状态发生改变时,例如增加、移除等,通知用户空间程序。用户空间程序收到这样的事件后,会做相应的处理。该机制通常是用来支持热拔插设备的,例如U盘插入后,USB相关的驱动软件会动态创建用于表示该U盘的device结构(相应的也包括其中的kobject),并告知用户空间程序,为该U盘动态的创建/dev/目录下的设备节...

2018-08-03 23:42:49 4578

原创 linux设备模型一(基础知识)

1. 前言在上一节中,蜗蜗大神有提到,由于Linux支持世界上几乎所有的、不同功能的硬件设备(这是Linux的优点),导致Linux内核中有一半的代码是设备驱动,而且随着硬件的快速升级换代,设备驱动的代码量也在快速增长。个人意见,这种现象打破了“简洁就是美”的理念,是丑陋的。它导致Linux内核看上去非常臃肿、杂乱、不易维护。但蜗蜗也知道,这不是Linux的错,Linux是一个宏内核,它必须面...

2018-08-02 22:02:40 9122 2

原创 linux内核整体架构

1.前言本文是“Linux内核分析”系列文章的第一篇,会以内核的核心功能为出发点,描述Linux内核的整体架构,以及架构之下主要的软件子系统。之后,会介绍Linux内核源文件的目录结构,并和各个软件子系统对应。2.linux内核的核心功能如下图所示,Linux内核只是Linux操作系统一部分。对下,它管理系统的所有硬件设备;对上,它通过系统调用,向Library Routine(例如C...

2018-08-02 21:23:54 6571 4

原创 linxu驱动platform的细节实现

https://blog.csdn.net/qq_16777851/article/details/80850526https://blog.csdn.net/qq_16777851/article/details/81124536https://blog.csdn.net/qq_16777851/article/details/81145148前两篇文章以例子的形式举例了platfo...

2018-08-02 20:10:50 1299

USB_HID的两篇官方文档

Device Class Definition for Human interface Devices和 HID Usage Tables两篇官方文章,保存起来,已被更换电脑后用

2019-01-10

read-copy-update

linux锁机制的经典文档,read - copy - update。来自linux社区。

2018-09-25

输入子系统编程模板

尴尬,我自己的某个博客要用。这个东西我不想设置分数的,结果不能为0分。

2018-07-29

51单片机移植的ucosii嵌入式操作系统

对ucosii中不必要的内容进行了裁剪。因为51单片机的idata很小,这份代码用了51单片内部的idata作为当前运行任务的任务栈,其它没被运行的任务的栈则被放置在内存较大的xdata区。但因为51单片机的汇编语句少,简单,可以作为其他处理器移植ucosii的模版和参考,同时也是学习51单片机递增以及高级应用的实例。

2018-07-22

基于51单片机移植的ucosii的代码

对ucosii中不必要的内容进行了裁剪。这份代码用了51单片内部的idata作为任务栈,因为51单片机的idata很小,所以这份代码可以运行的任务数量比较少。但因为51单片机的汇编语句少,简单,可以作为其他处理器移植ucosii的模版和参考。

2018-07-22

基于51单片机写的一个多任务切换的简易OS

里面代码是本人亲自手写的一个基于51单片机的多任务切换代码,核心代码只有不到200行,可以从代码层面方便单片机开发者了解任务切换的原理和使用,里面没有使用任何复杂的算法。

2018-07-22

linux0.11源代码

里面包含有linux0.11版本的原版代码和 赵炯博士对里面所有代码的注释。

2018-07-22

空空如也

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

TA关注的人

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