- 博客(13)
- 资源 (3)
- 收藏
- 关注
原创 回味经典——uboot1.1.6 之 第二阶段 第三阶段
第一阶段:http://blog.csdn.net/lizuobin2/article/details/52054293 上篇文章说到,再清 BSS 段之后,CPU 跳转到 sdram 里的 start_armboot() 函数,本文,分析 uboot 流程的第二阶段。 start_armboot函数在lib_arm/board.c中定义,是U-Boot第二阶段代码的入
2016-07-29 14:10:12 3030
原创 回味经典——uboot1.1.6 之 第一阶段
最近打算移植一个比较新的 uboot 到开发板,回想起来上一次移植 uboot1.1.6 已经差不多是一年前了,手头保留了一些当时移植分析时的笔记,但是没有归纳梳理,在移植新版 uboot 之前,再来回味一下经典。本文重点在于分析 uboot 启动流程以及 uboot 自身的细节,比如栈空间的划分、如何设置 tag 、如何添加一个自定义命令等。但是不涉及基本的硬件驱动的分析,比如内存初始化、时钟初
2016-07-28 20:52:54 4437 4
原创 位置无关码、位置有关码、链接地址、加载地址
在移植 uboot 时,接触到一个概念叫做 位置无关码,那么与它对应的就是位置有关码。提到这两个概念就还得提一提链接地址、加载地址。 链接地址,链接脚本里指定的,理论上程序运行时所处的地址。在编译时,编译器会根据链接地址来翻译位置有关码。 加载地址,程序运行时,实际所处的地址。 位置无关码,位置有关码,是相对于一条指令的正常目的来说的。比如 ldr r0 ,=标号,它
2016-07-27 23:48:45 7404 3
转载 制作uboot
mkimage工具位于 Uboot tools目录下 mkimage是在制作镜像文件时候, 在原来的image文件前增加一个0x40字节长度的头,增加的头结构描述如下/* * Legacy format image header, * all data in network byte order (aka natural aka bigendian). */typed
2016-07-27 16:36:46 1403
原创 实验探究 ioremap
ioremap 写驱动最常用的函数之一,但是对它始终一知半解,看了内核关于这部分的代码,功力不够也是一头雾水。本文通过实验的方法,了解 ioremap 到底干了些啥,本文献给那些看不懂内核源代码,还想知道 ioremap 能干些什么,干了些什么的同学。 实验方法: 点灯实验,LED接在GPB5~8,因此需要使用 gpbcon 配置,gpbdat 输出高低。
2016-07-27 16:19:20 3291
原创 自己写 bootloader
想想 uboot 的代码量,我们说自己写一个 bootloader 是不是口出狂言了?然而并没有,bootloader 的唯一目的只有一个,那便是启动内核。内核就是一大段可执行程序,我们只要跳转到它的入口地址去执行不就OK? 所以,写一个简单的 bootloader 并不困难。 现在来思考一下,目的是启动内核,那么内核在哪里?刚上电的时候,内核肯定是位于 nandflash 里的,我们得
2016-07-27 15:55:22 11327 2
原创 Jlink 烧写文件到 nandflash norflash
s3c2440开发板支持两种启动方式,一种是 nandflash 启动,此时 nandflash 中的前 4K 内容会由硬件自动拷贝至片内 SRAM 4K 内存中,这片内 4K 内存会被 map 到 nGCS0 也就是 bank0 ,起始地址为0 。如果是 Nor 启动,norflash 也是被接在 nGCS0 ban0 上的,Norflash 可以直接被读取,因此 cpu 从 Norflas
2016-07-25 17:14:05 7309 1
原创 USB驱动——键盘驱动(控制传输)
本文以 usbkbd.c 为例,分析 usb 键盘驱动程序。static int __init usb_kbd_init(void){ int result = usb_register(&usb_kbd_driver); if (result == 0) printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":" DRIV
2016-07-21 12:25:56 5612 2
原创 USB驱动——鼠标驱动程序(中断传输)
本文以 usbmouse.c 为例,简单分析usb鼠标驱动程序。static int __init usb_mouse_init(void){ int retval = usb_register(&usb_mouse_driver); if (retval == 0) printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":"
2016-07-20 17:46:19 3765
原创 USB驱动——描述符、URB、管道
大家常说,一个设备通常有多个配置,配置通常有多个接口,接口通常有多个端点。接口代表逻辑上的设备,比如声卡分为 录音和播放。访问设备时,访问的是某个接口(逻辑设备)。除了端点0之外,每个端点只支持一个传输方向,一种性质的传输传输数据时,读写某个端点,端点是数据通道。 本文首先分析设备、配置、接口、设置、端点之间的关系,然后根据 2440-ochi 驱动程序,分析一个设备注册到内核时,它的这
2016-07-19 11:44:03 8415
原创 USB主机控制器驱动——OHCI分析
首先,整个驱动框架的开始,是基于 platform 平台总线的。struct platform_device s3c_device_usb = { .name = "s3c2410-ohci", .id = -1, .num_resources = ARRAY_SIZE(s3c_usb_resource), .resource = s3c_usb_resource,
2016-07-18 22:34:05 9722 1
原创 PCI驱动框架简单分析
一、PCI 概念介绍 PCI是CPU和外围设备通信的高速传输总线。PCI规范能够实现32位并行数据传输,工作频率为 33MHz 或 66MHz ,最大吞吐率高达266MB/s,PCI的衍生物包括 CardBus、mini-PCI、PCI-Express、cPCI等。 PCI总线体系结构是一种层次式的体系结构。在这种层次体系结构中,PCI桥设备占据着重要的地位,它将父总线与子总线
2016-07-05 14:34:32 19597
原创 tty初探—uart驱动框架分析(二)uart_add_one_port
在前面的一篇文章中,我们分析了一个 uart_driver 的向上注册过程,主要是 tty 的一些东西,知道了 tty 注册了一个字符设备驱动,我们在用户空间 open 时将调用到 uart_port.ops.startup ,在用户空间 write 则调用 uart_port.ops.start_tx ,还知道了如何 read 数据等等。但是,这些都是内核帮我们实现好的,在真正的驱动开发过程中几
2016-07-01 19:24:58 14408 8
dnw_fastboot_for2440
2016-12-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人