S3C6410 USB-HOST调试纪实

Linux 3.3.0移植到S3C6410开发板上之一 这里仅仅是移植成功内核,可以挂载文件系统运行,至于驱动会陆续添加。      第一步:到内核官网上下载最新的内核,我下载的是linux-3.3-rc3.tar.bz2。      第二步:解压内核,进入arch/arm/mach-s3c64xx目录下,看到不少6410的板级文件,我们这里选择mini6410开开展工作,在目录下将mach-mini6410.c文件复制一份,命名为:mach-jf 阅读详情

 

共需要修改个文件:
kernel下:
drivers/usb/kconfig
drivers/usb/host/ohci-hcd.c
arch/arm/mach-s3c6410/mach-smdk6410.c
arch/arm/plat-s3c64xx/devs.c
U-boot-nand下:
board/samsung/smdk6410/lowlevel_init.S
 
 
下面是攻略:
[S3C6410]USB-HOST驱动完成
 

idea6410开发手册中提到使用usb-host功能必须将无源晶振改为48MHz有源晶振,最近看了一下,使用OHCI兼容的USB-Host功能,可以通过EPLL提供时钟,也就是说外接晶振完全无用。果然,经过一晚的奋斗,USB-HOST功能搞定,记录一下过程。

(1)首先看了S3C6410的数据手册,25章USB-HOST就薄薄两页,和S3C2410基本一样,大意是你去参考OHCI手册吧。
这说明S3C6410的USB基本上是做好的,兼容OHCI,不需要我们做太多修改。

(2)修改内核,添加USB支持,添加OHCI HOST HCD支持,添加U盘等支持。发现以前写的帖子还蛮管用的:
http://hi.baidu.com/aokikyon/blog/item/8545893e3a8a6ffc838b1307.html

还得修改/drivers/usb/kconfig

添加config USB_ARCH_HAS_OHCI对S3C64XX的支持

default y if ARCH_S3C64XX

 

 

(3)选择完毕,开始编译,发现以下问题:
CC      drivers/usb/host/ohci-hcd.o
drivers/usb/host/ohci-hcd.c:1091:2: error: #error "missing bus glue for ohci-hcd"
make[3]: *** [drivers/usb/host/ohci-hcd.o] 错误 1
make[2]: *** [drivers/usb/host] 错误 2
make[1]: *** [drivers/usb] 错误 2
make: *** [drivers] 错误 2

看了一下OHCI文件,发现要想三星芯片使用,需要包含ohci-s3c2410.c文件,如果没哟包含这个文件,就会提示找不到hcd的以上错误。
这段代码在ohci-hcd.c中是这样定义的
#ifdef CONFIG_ARCH_S3C2410
#include "ohci-s3c2410.c"
#define PLATFORM_DRIVER   ohci_hcd_s3c2410_driver
#endif

由于我们使用的是S3C6410,并没有CONFIG_ARCH_S3C2410,手动修改一下好了:
#ifdef CONFIG_ARCH_S3C64XX
#include "ohci-s3c2410.c"
#define PLATFORM_DRIVER   ohci_hcd_s3c2410_driver
#endif

(4)编译完毕后完全没有反应,参考2.6.24代码,发现需要添加platform-device注册信息:
/plat-s3c64xx/devs.c
/* USB Host Controller */
static struct resource s3c_usb_resource[] = {
[0] = {
   .start = S3C24XX_PA_USBHOST,
   .end   = S3C24XX_PA_USBHOST + S3C24XX_SZ_USBHOST - 1,
   .flags = IORESOURCE_MEM,
},
#if !defined(CONFIG_CPU_S3C6400) && !defined(CONFIG_CPU_S3C6410)
[1] = {
   .start = IRQ_USBH,
   .end   = IRQ_USBH,
   .flags = IORESOURCE_IRQ,
}
#else
[1] = {
   .start = IRQ_UHOST,
   .end   = IRQ_UHOST,
   .flags = IORESOURCE_IRQ,
}
#endif
};

static u64 s3c_device_usb_dmamask = 0xffffffffUL;

struct platform_device s3c_device_usb = {
.name    = "s3c2410-ohci",
.id    = -1,
.num_resources   = ARRAY_SIZE(s3c_usb_resource),
.resource   = s3c_usb_resource,
.dev              = {
   .dma_mask = &s3c_device_usb_dmamask,
   .coherent_dma_mask = 0xffffffffUL
}
};
EXPORT_SYMBOL(s3c_device_usb);

编译后还是发现错误,S3C24XX_PA_USBHOST、S3C24XX_PA_USBHOST、IRQ_USBH都没有定义。
查找半天后发现HOST的物理地址0x74300000没有定义,手动填入这个地址好了。
SIZE大概写一个尺寸,比如1K就可以(实际上用到很少)。
至于中断号,开始我填了中断控制器中的位置47,可惜不对,后来发现头文件中有定义,填IRQ_USBH.
一下是修改后代码:
/* USB Host Controller add by rockie */

static struct resource s3c_usb_resource[] = {
[0] = {
   .start = 0x74300000,//S3C24XX_PA_USBHOST,
   .end   = 0x74301000,//S3C24XX_PA_USBHOST + S3C24XX_SZ_USBHOST - 1,
   .flags = IORESOURCE_MEM,
},
[1] = {
   .start = IRQ_USBH,//IRQ_UHOST,
   .end   = IRQ_USBH,//IRQ_UHOST,
   .flags = IORESOURCE_IRQ,
}
};

static u64 s3c_device_usb_dmamask = 0xffffffffUL;

struct platform_device s3c_device_usb = {
.name    = "s3c2410-ohci",
.id    = -1,
.num_resources   = ARRAY_SIZE(s3c_usb_resource),
.resource   = s3c_usb_resource,
.dev              = {
   .dma_mask = &s3c_device_usb_dmamask,
   .coherent_dma_mask = 0xffffffffUL
}
};

EXPORT_SYMBOL(s3c_device_usb);

还需要注册进平台设备:
/mach-smdk6410/mach-s3c6410.c添加

static struct platform_device *smdk6410_devices[] __initdata = {
...
&s3c_device_usb, //<——添加这句即可
...
}


(5)编译完毕,初始化怎么还是错误?
ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
s3c2410-ohci s3c2410-ohci: S3C24XX OHCI
s3c2410-ohci s3c2410-ohci: new USB bus registered, assigned bus number 1
s3c2410-ohci s3c2410-ohci: irq 79, io mem 0x74300000
s3c2410-ohci s3c2410-ohci: init err (00000000 0000)
ohci_hcd: can't start s3c24xx
s3c2410-ohci s3c2410-ohci: startup error -75
s3c2410-ohci s3c2410-ohci: USB bus 1 deregistered
s3c2410-ohci: probe of s3c2410-ohci failed with error -75
Initializing USB Mass Storage driver...
usbcore: registered new interface driver usb-storage
USB Mass Storage support registered.

原来还要完成初始化时钟的函数:
/mach-smdk6410/mach-s3c6410.c

#if defined(CONFIG_USB_GADGET_S3C_OTGD) || defined(CONFIG_USB_OHCI_HCD)
#include <plat/regs-otg.h>

#include <linux/usb/ch9.h>
#endif

/*************************************************************************************
* USB HOST
**************************************************************************************/
#ifdef CONFIG_USB_OHCI_HCD
void usb_host_clk_en(int usb_host_clksrc)
{
printk("Usb Host CLK enable! 2009 by Rockie /n");

switch (usb_host_clksrc)
{
case 0: // epll clk
   writel((readl(S3C_CLK_SRC)& ~S3C_CLKSRC_UHOST_MASK) | S3C_CLKSRC_EPLL_CLKSEL | S3C_CLKSRC_UHOST_EPLL, S3C_CLK_SRC);

   // USB host colock divider ratio is 2 /
   //writel((readl(S3C_CLK_DIV1)& ~S3C_CLKDIVN_UHOST_MASK) | S3C_CLKDIV1_USBDIV2, S3C_CLK_DIV1);
   *(volatile unsigned long*) S3C_CLK_DIV1 |= (0<<20);
   break;
case 1: // oscillator 48M clk /
   writel(readl(S3C_CLK_SRC)& ~S3C_CLKSRC_UHOST_MASK, S3C_CLK_SRC);
   //otg_phy_init(otg_phy_clk);

   // USB host colock divider ratio is 1 /
   //writel(readl(S3C_CLK_DIV1)& ~S3C_CLKDIVN_UHOST_MASK, S3C_CLK_DIV1);
   *(volatile unsigned long*) S3C_CLK_DIV1 |= (0<<20);
   break;
default:
   printk(KERN_INFO "Unknown USB Host Clock Source/n");
   BUG();
   break;

}

writel(readl(S3C_HCLK_GATE)|S3C_CLKCON_HCLK_UHOST|S3C_CLKCON_HCLK_SECUR, S3C_HCLK_GATE);
writel(readl(S3C_SCLK_GATE)|S3C_CLKCON_SCLK_UHOST, S3C_SCLK_GATE);

}
EXPORT_SYMBOL(usb_host_clk_en);
#endif

最后别忘了初始化时调用这个函数(在smdk6410_machine_init函数中调用,用前需声明):
usb_host_clk_en(0);

最好用宏圈住

#ifdef CONFIG_USB_OHCI_HCD
usb_host_clk_en(0);
#endif

(6)初始化通过
ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
s3c2410-ohci s3c2410-ohci: S3C24XX OHCI
s3c2410-ohci s3c2410-ohci: new USB bus registered, assigned bus number 1
s3c2410-ohci s3c2410-ohci: irq 79, io mem 0x74300000
usb usb1: New USB device found, idVendor=1d6b, idProduct=0001
usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
usb usb1: Product: S3C24XX OHCI
usb usb1: Manufacturer: Linux 2.6.29 ohci_hcd
usb usb1: SerialNumber: s3c24xx
usb usb1: configuration #1 chosen from 1 choice
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 2 ports detected
Initializing USB Mass Storage driver...
usbcore: registered new interface driver usb-storage
USB Mass Storage support registered.

但是插上U盘提示错误:
/ # usb 1-1: new full speed USB device using s3c2410-ohci and address 2
usb 1-1: device descriptor read/64, error -62
usb 1-1: device descriptor read/64, error -62
usb 1-1: new full speed USB device using s3c2410-ohci and address 3
usb 1-1: device descriptor read/64, error -62
usb 1-1: device descriptor read/64, error -62
usb 1-1: new full speed USB device using s3c2410-ohci and address 4
usb 1-1: device not accepting address 4, error -62
usb 1-1: new full speed USB device using s3c2410-ohci and address 5
usb 1-1: device not accepting address 5, error -62
hub 1-0:1.0: unable to enumerate USB device on port 1

怎么回事呢?原来EPLL初始化时只有24MHz,怎么分频也到不了48MHz啊!
S3C24XX Clocks, (c) 2004 Simtec Electronics
S3C64XX: PLL settings, A=666000000, M=532000000, E=24000000
S3C64XX: HCLK2=266000000, HCLK=133000000, PCLK=66500000
mout_apll: source is fout_apll (1), rate is 666000000
mout_epll: source is fout_epll (1), rate is 24000000
mout_mpll: source is mpll (1), rate is 532000000
mmc_bus: source is mout_epll (0), rate is 24000000
mmc_bus: source is mout_epll (0), rate is 24000000
mmc_bus: source is mout_epll (0), rate is 24000000
usb-bus-host: source is clk_48m (0), rate is 48000000
uclk1: source is dout_mpll (1), rate is 66500000
spi-bus: source is mout_epll (0), rate is 24000000
spi-bus: source is mout_epll (0), rate is 24000000
audio-bus: source is mout_epll (0), rate is 24000000
audio-bus: source is mout_epll (0), rate is 24000000
irda-bus: source is mout_epll (0), rate is 24000000

在Linux内核里尝试修改EPLL_CON0,M=0x20 P=1 S=3,计算出32*12MHz/(2^3)=48MHz
可是Linux中总是写这个寄存器不成功,最后怒了,直接修改U-boot,从汇编了改了回来。
在board/samsung/smdk6410/lowlevel_init.S(这里是编译u-boot-nand的源码)中有用到
ldr r1, =APLL_VAL
str r1, [r0, #APLL_CON_OFFSET] //这里写APLL_CON寄存器
ldr r1, =MPLL_VAL
str r1, [r0, #MPLL_CON_OFFSET] //这里写MPLL_CON寄存器

ldr r1, =0x80200203    /* FOUT of EPLL is 96MHz */
str r1, [r0, #EPLL_CON0_OFFSET]
ldr r1, =0x0
str r1, [r0, #EPLL_CON1_OFFSET]

ldr r1, [r0, #CLK_SRC_OFFSET] /* APLL, MPLL, EPLL select to Fout */

看这段,注释EPLL是96MHz,实际这样配置只有24MHz。
ldr r1, =0x80200203    /* FOUT of EPLL is 24MHz */
修改为
ldr r1, =0x80200103    /* FOUT of EPLL is 48MHz */

s3c6410支持三个PLL分别是APLLMPLLEPLLAPLLARM提供时钟,产生ARMCLKMPLL为所有和AXI/AHB/APB相连的模块提供时钟,产生HCLKPCLKEPLL为特殊的外设提供时钟,产生SCLK。详见S3C6410处理器介绍

(7)编译,通过。
S3C24XX Clocks, (c) 2004 Simtec Electronics
S3C64XX: PLL settings, A=666000000, M=532000000, E=48000000
S3C64XX: HCLK2=266000000, HCLK=133000000, PCLK=66500000
mout_apll: source is fout_apll (1), rate is 666000000
mout_epll: source is fout_epll (1), rate is 48000000
mout_mpll: source is mpll (1), rate is 532000000
mmc_bus: source is mout_epll (0), rate is 48000000
mmc_bus: source is mout_epll (0), rate is 48000000
mmc_bus: source is mout_epll (0), rate is 48000000
usb-bus-host: source is clk_48m (0), rate is 48000000
uclk1: source is dout_mpll (1), rate is 66500000
spi-bus: source is mout_epll (0), rate is 48000000
spi-bus: source is mout_epll (0), rate is 48000000
audio-bus: source is mout_epll (0), rate is 48000000
audio-bus: source is mout_epll (0), rate is 48000000
irda-bus: source is mout_epll (0), rate is 48000000

ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
s3c2410-ohci s3c2410-ohci: S3C24XX OHCI
s3c2410-ohci s3c2410-ohci: new USB bus registered, assigned bus number 1
s3c2410-ohci s3c2410-ohci: irq 79, io mem 0x74300000
usb usb1: New USB device found, idVendor=1d6b, idProduct=0001
usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
usb usb1: Product: S3C24XX OHCI
usb usb1: Manufacturer: Linux 2.6.29 ohci_hcd
usb usb1: SerialNumber: s3c24xx
usb usb1: configuration #1 chosen from 1 choice
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 2 ports detected
Initializing USB Mass Storage driver...


至此USB-HOST功能可以正常使用:
/ # usb 1-1: new full speed USB device using s3c2410-ohci and address 2
usb 1-1: New USB device found, idVendor=1976, idProduct=1307
usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 1-1: Product: USB Reader
usb 1-1: Manufacturer: ChipsBnk
usb 1-1: SerialNumber: 110074973765
usb 1-1: configuration #1 chosen from 1 choice
uba: unknown partition table

/ # mount -t vfat /dev/uba1 /mnt
/ # cd mnt
/mnt # ls
4020 NorFlash_bootloader
??
?????
??????
??ACM????200?
?tcp ip?????? ????????????(???????).pdf
ARMKiller???????????.doc
Jlink Driver
TCPIP list
elf
elf2
elf3
elf5
elf6
elf7
ieka
linux-2.6.28.tar.bz2
modsile
reserve_mmu
test_sdram.elf
xme30.zip
/mnt # cd ..
/ # umount /mnt
/ # usb 1-1: USB disconnect, address 2

接下来调试VIAUSBMODEM,除了修改VIAUSBModem.c和VIAUSBModem.h两个文件外还需要修改:

/driver/usb/serial/kconfig

/driver/usb/serial/makefile两个文件

S3C6410开发板       S3C6410开发板是北京雅希路基于S3C6400开发板基础之上倾力打造的又一款高端ARM11开发板,面向高端手机、PDA等产品开发研究人员,旨在为客户提供一个性能优异的基础开发套件,您可以将之作为初期软件开发的平台,也可以直接选用并集成到您的产品中,能够更加缩短您的产品开发周期。该开发套件包括: 核心板(37×50mm) 底板(185×118mm)完整版成套BSP驱动 Win 阅读详情

相关推荐

Make编译出错的原因及解决方法(嵌入式)

通过理解并解决这些常见的Make编译错误,可以提高嵌入式项目的编译成功率。当然,实际项目中可能会遇到其他类型的错误,但这些错误是经常出现的情况。通过仔细检查代码、检查头文件和库文件的路径、解决未定义的引用和处理重复定义等问题,可以更好地利用Make工具进行嵌入式开发中的项目编译。在嵌入式开发中,使用Make工具进行项目的编译是常见的做法。本文将介绍一些常见的Make编译错误,并提供相应的解决方法。这是最常见的Make编译错误之一。当代码中使用了未定义的函数或变量,并且没有包含相应的头文件时,编译会报错。

Orion_O的博客 3048

【转】[S3C6410]USB-HOST驱动完成

idea6410开发手册中提到使用usb-host功能必须将无源晶振改为48MHz有源晶振,最近看了一下,使用OHCI兼容的USB-Host功能,可以通过EPLL提供时钟,也就是说外接晶振完全无用。果然,经过一晚的奋斗,USB-HOST功能搞定,记录一下过程。(1)首先看了S3C6410的数据手册,25章USB-HOST就薄薄两页,和S3C2410基本一样,大意是你去参考OHCI手册吧。这

knock的专栏 5290

S3C6410嵌入式系统开发:从裸机到驱动代码详解

S3C6410微处理器是三星电子推出的一款高性能、低功耗的ARM11架构处理器,广泛应用于移动设备和嵌入式系统中。它具有强大的图形处理能力和丰富的接口资源,可以支持Linux、Android等多种操作系统。S3C6410处理器搭载了ARM1176JZF-S核心,工作频率可达667MHz,具有32KB的指令缓存和32KB的数据缓存。此外,它集成了多种外设接口,如USB HOST/Device,SD/MMC等,使其在数据存储和传输方面具有优势。

weixin_42372837的博客 889

基于s3c6410 otg controller的gadget driver及usb枚举分 析

一.简介      一个完整的USB系统由两部分构成,即usb主机(usb host)和usb设备(usb device)。usb主机通常是指我们的pc机、具有host controller的嵌入式设备;像u盘、usb鼠标、键盘属于usb设备,具有otg controller的usb设备,它即可工作在host模式又可以工作在device模式,模式之间通过HNP协议来进行转换,如我们平时比较常

fanqipin的专栏 1万+

kernel(十六)USB-HOST主机控制器之EHCI

    简单地讲,OHCI、UHCI都是USB1.1的接口标准,而EHCI是对应USB2.0的接口标准,最新的xHCI是USB3.0的接口标准。1. OHCI(Open Host Controller Interface)是支持USB1.1的标准,主要用于非x86的USB,如扩展卡、嵌入式开发板的USB主控。2. UHCI(Universal Host Controller Interface),...

跬步千里,窥叶知秋 2821

Linux总线、设备与驱动》USB设备发现机制

转载自:http://blog.csdn.net/tankai19880619/article/details/11639185 说明:本分析基于mstar801平台Linux2.6.35.11内核,其他内核版本仅供参考。 一、程序在内核中的位置 1.usb host做为pci总线下的一个设备存在(嵌入式系统中有可能也会直接挂在CPU上);这部分驱动由厂家实现,本分析以mst

老孙的android6探索之旅 741

【热点关注】UT-S3C6410

UT-S3C6410开发板简介 UT-S3C6410开发板采用核心板加底板设计,核心板PCB采用6层板设计,尺寸81.2mm×55.8mm,底板PCB采用4层板设计,尺寸200mm×140mm。核心板上集成了Samsung 533/667M CPU S3C6410(ARM1176JZF-S内核)、128M Mobile DDR和256M Nand Flash,通过4个1.27mm双排插

1034

移植linux内核到s3c6410(配置内核make menuconfig)

 1、准备:   由于调试阶段要经常修改内核,烧写flash比较耗时,准备采用u-boot+uImage+initrd机制,内核基础版本采用linux 2.6.38 单板需要支持的: CPU: S3C6410 ARM1176JZF-SDDR: 256MBFLASH:MLC 2   NAND FLASH 2GB串口 4网口 DM9000RTC驱动看门狗音频驱动USBUSB

roadtoforest的专栏 3831

S3C6410 USB枚举过程的工作经验总结[bootloader]

1.有关对比结束阶段的不同点: 对控制写入阶段:setup--OUT (Data0 | 1)--IN(0长DATA1) USB HOST送出IN包,USB Device以0长DATA1 包结束控制写入过程 对比控制读取过程:setup--IN(Data0 | 1)--OUT(0长DATA1 ) USB HOST发出OUT 0长DATA1包以结束控制读取过程 对于无数据的控制事务:setup--IN

激情成就梦想--关注移动互联网 2458

S3C6410 USB枚举过程的工作经验总结

1.有关对比结束阶段的不同点:  对控制写入阶段:setup--OUT (Data0 | 1)--IN(0长DATA1)  USB HOST送出IN包,USB Device以0长DATA1 包结束控制写入过程  对比控制读取过程:setup--IN(Data0 | 1)--OUT(0长DATA1 )  USB HOST发出OUT 0长DATA1包以结束控制读取过程  对于无数据的

hurongying2012的博客 817

一个决定,入手idea6410

一个决定,入手idea6410

hfdghjh的博客 661

转:S3C6410系统控制器

S3C6410系统控制器包括两部分:系统时钟控制和电源管理。一、系统时钟将产生系统所需的时钟信号。共有三个PLL(锁相环)。其中第一个(ARM PLL)为ARMCLK专用,第二个(MAIN PLL)用于HCLK和PCLK,第三个(EXTRA PLL)用于外围设备,特别是用于音频设备的时钟。每个外围设备的时钟信号可以用软件来enable和disable,用来降低功耗。1、ARMCLK----->   CPU2、HCLK------>   AXI/Ahb 总线上的设备3、PCLK    ------>   Ap

glorin的专栏 2262

kernel(十七)USB-HOST主机控制器之OHCI

   Linux内核(以3.8.3为例)默认仅提供了ehci-s5p.c,但是提供了很多其他平台的ohci源码,因此,我们可以参考ohci-exynos.c来编写自己的ohci-s5p.c,然后参考ehci-s5p.c的代码组织方式添加到内核就可以了。下面废话少说,直接进入正题,开始USB HOST的EHCI和OHCI移植。(一)编写ohci-s5p.cohci-exynos.c为模板,修改以适合...

跬步千里,窥叶知秋 1713

USB学习总结

USB学习总结1—s3c6410USB驱动修改 整理USB的内容的内容已经几天了,写点东西作为总结。全部内容分三部分,第一部分主要内容是USB驱动在Linux系统中的具体实现方法;第二部分参考《Linux设备驱动程序(第三版)》中的内容总结USB驱动的结构;最后,总结一下USB协议。 一、             首先是对USB设备的得支持。 1、viarch/arm/mach-s3c64

龙图腾的博客 1239

2.6内核增加usb支持 - 配置简介

USB support  USB支持  Support for Host-side USB  主机端(Host-side)USB支持.通用串行总线(USB)是一个串行总线子系统规范,它比传统的串口速度更快并且特性更丰富(供电,热插拔,最多可接127个设备等),有望在将来一统PC外设接口.USB的"Host"(主机)被称为"根"(也可以理解为是主板上的USB控制器),外部设备被称为

DREAMER 4550

Linux 内核编译 modules ehci-hcd, ohci-hcd, uhci-hcd not found

故障现象: make install后显示如下: WARNING: No module ehci-hcd found for kernel 3.x.x.art.x86_64, continuing anyway WARNING: No module ohci-hcd found for kernel 3.x.x.art.x86_64, continuing anyway W

China cloud union 1万+

移植USB无线网卡驱动心得

最近因为需要,要在Zedboard上移植一个无线网卡驱动,因为以前在友善之臂上面移植过,所以以为很简单,没想到这件事情却花了我将近一周才搞好,中间就因为内核的一个小的疏忽,特在此将中间遇到的问题写下来,留作以后谨记。 开发板:Zynq Zedboard 操作系统:Ubuntu 12,04 交叉编译器:arm-Xilinx-Linux-gnueabi gcc WIFI 模组:TP

yuzeze的专栏 2174

Linux驱动开发必看:详解神秘内核

在开始步入Linux设备驱动程序的神秘世界之前,让我们从驱动程序开发人员的角度看几个内核构成要素,熟悉一些基本的内核概念。我们将学习内核定时器、同步机制以及内存分配方法。不过,我们还是得从头开始这次探索之旅。因此,本章要先浏览一下内核发出的启动信息,然后再逐个讲解一些有意思的点。 2.1 启动过程  图2-1显示了基于x86计算机Linux系统的启动顺序。第一步是BIOS从启动设备中导入主引导记录(MBR),接下来MBR中的代码查看分区表并从活动分区读取GRUB、LILO或SYSLINUX等引导装入程序,之

1799
上一篇: ohci-s3c2410代码注释解析
下一篇: USB OTG 技术概述
willand1981
博客等级 码龄17年 136粉丝 31原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值