完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
3个回答
|
|
本讲主要概述Linux设备驱动框架、驱动程序的配置文件以及常用的加载驱动程序的;并且介绍Red Hat Linux程序是如何加载驱动的,通过了解这个过程,我们可以自己将驱动程序安装启动盘中;完成安装
Linux设备驱动概述 1.系统后,使用kudzu自动配置硬件程序。各种内核和驱动模块 操作系统是通过各种内核和驱动系统驱动来驾驭硬件设备的,它是为用户屏蔽了丰富的设备,驱动硬件是基础的功能,并且提供统一的操作方式。上的文档时,不用管到底使用nVIDIA芯片,还是ATI芯片的显示卡,常见的文字输入命令后,需要就显示在屏幕上。硬件驱动程序是底层的组成部分,在Linux内核源程序中也。占有较高的比例。 Linux的内核中采用可加载的模块化设计(LKM的,加载内核模块),一般情况下编译的Linux的内核是支持可插入式模块的,也就是将最基本的核心代码编译在内核中,其它的代码可以选择是在内核中,或者编译为内核的模块文件。 如果需要某种功能,比如需要访问一个NTFS分区,就加载相应的NTFS模块。这种设计可以使内核文件不至于太大,但是又可以支持很多的功能,必要时动态地加载。这是一种跟微内核设计不太一样,但却是切实可行的内核设计方案。 我们常见的驱动程序就是作为内核模块动态加载的,比如声卡驱动和网卡驱动等,而Linux最基础的驱动,比如CPU、PCI总线、TCP/IP协议、APM(高级电源管理)、VFS等驱动程序则在内核文件中。有时也把内核模块就驱动程序,直接驱动的内容是超级硬件罢了,比如ext3文件系统的驱动。 理解这一点很重要因此,加载驱动时就是加载内核模块下面来看一下有关模块的命令,在加载驱动程序要用到它们:。lsmod的,modprob,insmod的,rmmod的,modinfo命令 的lsmod列出当前系统中加载的模块,例如: #lsmod (与cat /proc/modules 得出的内容是一致的) Module Size Used by Not tainted radeon 115364 1 agpgart 56664 3 nls_iso8859-1 3516 1 (autoclean) loop 12120 3 (autoclean) smbfs 44528 2 (autoclean) parport_pc 19076 1 (autoclean) lp 9028 0 (autoclean) parport 37088 1 (autoclean) [parport_pc lp] autofs 13364 0 (autoclean) (unused) ds 8704 2 yenta_socket 13760 2 pcmcia_core 57184 0 [ds yenta_socket] tg3 55112 1 sg 36940 0 (autoclean) sr_mod 18104 0 (autoclean) microcode 4724 0 (autoclean) ide-scsi 12208 0 scsi_mod 108968 3 [sg sr_mod ide-scsi] ide-cd 35680 0 cdrom 33696 0 [sr_mod ide-cd] nls_cp936 124988 1 (autoclean) nls_cp437 5148 1 (autoclean) vfat 13004 1 (autoclean) fat 38872 0 (autoclean) [vfat] keybdev 2976 0 (unused) mousedev 5524 1 hid 22212 0 (unused) input 5888 0 [keybdev mousedev hid] ehci-hcd 20104 0 (unused) u***-uhci 26412 0 (unused) u***core 79392 1 [hid ehci-hcd u***-uhci] ext3 91592 2 ***d 52336 2 [ext3] 上面显示了当前系统中加载的模块,左边数第一列是模块名,第二列是该模块大小,第三列则是该模块使用的数量。 如果后面为未使用,则表示该模块当前没在使用。如果有autoclean,则该模块被rmmod -a命令自动清洗。rmmod -a命令可以自动启动有autoclean的模块卸载,如果此时某个模块使用,则该模块标记为autoclean。如果在行尾的[]外有模块名称,则该内的模块就依赖模块。 cdrom 34144 0 [sr_mod ide-cd] 有ide-cd及sr_mod模块就依赖于cdrom模块。 系统的模块文件保存在/lib/modules/2.4.XXX/kerne目录中,根据分类分别在fs、net等子目录中,他们的相互依存则关系保存在/lib/modules/2.4.XXX/modules.dep 文件中。 需要注意,该文件写入了模块的依存关系,同时内核发现模块也是在这个文件中,modprobe命令,可以智能插入模块,它可以根据模块间依存关系,以及/etc/modules.conf文件中的内容智能插入模块。 # modprobe ide-cd 此时会发现,cdrom 模块也会自动插入。 insmod 也可以插入模块的命令,但不会自动解决依存关系,所以一般加载内核模块时使用的命令为 modprobe。rmmod 可以删除模块,但它只能删除没有使用的模块。 modinfo命令用来查看模块信息,如modinfo命令-d光盘,在红帽 Linux的系统-中,模块的相关命令在了modutils的RPM包中。 2.文件设备 当我们加载了设备驱动模块后,应该怎样访问这些设备呢?Linux是一种Unix类系统,Unix的一个基本特点是“一切皆为文件”,它已经抽象了的处理,将所有的硬件设备都像普通文件一样,只要硬件可以跟普通文件一样来打开、关闭和读写。 系统中的设备都是一个特殊的设备文件,用设备文件,设备文件又分为块(块)型设备文件、字符(字符)型设备文件和套接字(网络插件)类型文件。块设备文件通常指定哪些需要以块(如512字节)的设备类型的设备,例如IDE硬盘、SCSI硬盘、光驱。 而等字符设备文件常指定直接读写,没有设备的设备,比如并口、虚拟等。Socket(网络插件)设备文件类型指定的是设备访问的BSDsocket网络接口。 #ls -l /dev/hda /dev/video0 /dev/log brw-rw---- 1 root disk 3, 0 Sep 15 2003 /dev/hda srw-rw-rw- 1 root root 0 Jun 3 16: 55 /dev/log crw------- 1 root root 81, 0 Sep 15 2003 /dev/video0 上面显示的是三个设备文件,注意它们最前面的字符,块型设备为b,字符型设备为c,可能是套接字设备 ,设备文件都在/dev目录下,例如硬盘就是用/dev/hd*来表示,/dev/hda表示第一个IDE接口的主设备,/dev/hda1表示第一个硬盘上的第一个分区;而/dev/hdc表示第二个IDE接口的主设备。 #dd if=/dev/hda of=/root/a.img bs=446 count=1 把第一个硬盘上前446个字节的MBR信息导入到a.img文件中。 对于块和字符型设备,使用主(主)和辅(未成年人)设备编号来描述设备。主设备编号来表示某个设备驱动,同一个设备驱动程序模块控制的所有设备占用一个共同的主编号,而辅设备编号用于取决于该控制器下不同的设备,例如,/dev/hda1(block 3/) 1)、/dev/hda2(block 3/2)和/dev/hda3(block3/3)都代表着同一块硬盘的三个分区,他们的主设备号都是3,辅设备号分别为1、 2、3。这些设备特殊文件用mknod命令来创建: # mknod 硬盘 b 3 0 我们就在当前位置创建了一个与/dev/hda一样的、可以访问第一个IDE设备主硬盘的文件,文件名下载硬盘。 使用如下命令可以查看设备编号: #file /dev/hda /dev/hda: 块特殊 (3/0) 其中Block代表/dev/hda是系统的Block型(块型)设备文件,它的主设备编号为3,辅设备编号为0。 #ls -l /dev/hda /dev/hdb brw-rw---- 1 root disk 3, 0 Sep 15 2003 /dev/hda brw-rw---- 1 root disk 3, 64 Sep 15 2003 /dev /hdb 使用ls -l也可以看到设备编号,/dev/hdb代表第一个IDE接口的从设备(Slave)也是Block设备,编号为(3/64),还有一种设备文件是/dev/ tty*。使用如下命令: #echo “你好 tty1” 》 /dev/tty1 将字符串“输出tty1”到/dev/tty1代表的第一个虚拟识别上,此时按“Alt+F1”可以字符出现在屏幕上,这个特殊的文件就代表我们的第一虚拟表演。 #file /dev/tty1 /dev/tty1:字符特殊(4/1) 由上可以看到,它的类型为字符型(字符型)设备文件,主设备号为辅设备号为1。同样,/dev/t22代表着第二个虚拟读取,是字符设备,编号为(4/2)。 当将/dev/cdrom加载到/mnt/cdrom中时,只要访问/mnt/cdrom系统就会自动进入//cdrom对应的驱动程序中,访问实际的数据。 有关设备文件的可以看内核文档/usr/src/linux-2.*/Documentation/devices.txt文件(在内核的源文件解包后的文档目录中),其中详细叙述了各种设备文件编号的意义。 |
|
|
|
3.使用的/ proc中目录的文件监视驱动程序的状态
通过设备文件怎样访问到相应的驱动程序呢?它们中间有一个桥梁,那就是PROC文件系统,它一般会被加载到的/ proc目录。访问设备文件时,操作系统通常会通过查找/proc目录下的值,确定由哪些驱动模块来完成任务。如果proc文件系统没有加载,访问设备文件时就会出现错误。 Linux系统中proc文件系统是内核虚拟的文件系统,其中所有的文件都是内核中虚拟出来的,各种文件实际上是当前内核在内存中的参数。它就像是专门为访问内核而打开的一扇门,比如访问/proc/cpuinfo文件,实际上就是每次访问当前的CPU的参数,一次系统启动时系统都会通过/etc/fstab中设置的信息自动将proc文件系统加载到/proc目录下: # grep proc /etc/fstab none /proc proc 默认值 0 0 另外,也可以通过mount命令手动加载: # mount -t proc 无 /proc 通过/proc目录下的文件可以访问或更改内核参数,可以通过/proc目录驱动程序的信息。下面先让我们看一下/proc目录中的信息: #LS / PROC 1 4725 5032 5100 5248 5292加密KCORE分区14个4794 5044 5110 5250 5293设备kmsg PCI 2 4810 5075 5122 5252 5295 DMA ksyms中自3 4820 5079 5132 5254 5345驱动loadavg slabinfo 4个4831 5080 5151 5256 6 execdomains锁STAT 4316 4910个5081 5160 5258 7 FB LVM互换4317 4912 5082 5170 5262 70文件系统mdstat SYS 4318 4924 5083 5180 5271 8 FS meminfo中sysrq的触发器4319 4950 5084 5189 5287 9 IDE杂项SYSVIPC 4620 4963 5085 5232 5288 APM中断模块TTY 4676 5 5086 5242 5289 总线 iomem 安装正常运行时间 4680 5005 5087 5244 5290 cmdline ioports mtrr 版本 4706 5018 5088 5246 5291 cpuinfo irq net 需要知道的是,这些文件都是实时产生的虚拟文件,访问它们就是访问内存中真实的数据。这些数据是实时变化产生的,可以通过以下命令来查看文件的具体值: # cat /proc/interrupts CPU0 0: 50662 XT-PIC 定时器 1: 3 XT-PIC 键盘 2: 0 XT-PIC 级联 5: 618 XT-PIC ehci-hcd, eth1 8: 1 XT-PIC rtc 9: 0 XT -PIC u***-uhci、u***-uhci 11:50 XT-PIC u***-uhci、eth0 12:16 XT-PIC PS/2 鼠标 14:8009 XT-PIC ide0 15:0 XT-PIC ide1 NMI:0 ERR:0 其它文件的含意见表1所示。 的/ proc / SYS目录下的文件一般可以直接更改,相当于直接更改内核的运行参数,例如: # echo 1 》 /proc/sys/net/ipv4/ip_forward 上面的代码可以将内核中的数据包评论功能打开。另外 ,Linux 系统中提供了一些命令来查询系统的状态,如免费可以查看当前的内存使用情况,ide_info 可以查看ide设备的信息,:#ide_info / dev/had。类似的命令还有scsi_info,可以查看SCSI设备的信息。这些命令也是一般查询/proc目录下的文件,并返回结果。 系统初始化过程驱动程序的安装 在Linux过程中,系统上的硬件会被检测,基于检测到的结果安装程序会决定哪些模块需要在引导时被载入。Red Hat的程序安装anaconda,它提供了自动检测硬件,并且可以安装的机制。 但是,如果计算机内的部分硬件没有默认的驱动程序,比如SCSI内存卡,可以在启动后的启动dd下,输入“linux”,在加载完内核后,系统会自动提示插入驱动盘,可能会有机会把该硬件的Linux的驱动程序装入。 如果在安装系统时,某种硬件总是因为中断冲突(ISA总线的设备较常见,比如一块ISA网卡)没法正常驱动,或者是缺少驱动程序,那么可以在引导下输入“linux noprobe”。在这种模式下安装程序不会自动配置找到的硬件,可以自己来选择现有驱动,配置驱动程序的参数,或者选择用硬盘或软盘加载驱动程序。 定制引导盘 系统启动时是如何加载驱动的?下面让我们来看看一下帽子的安装过程是怎样引导的。 initrd.img 的虚拟文件系统加载到内存中。文件 ext2 文件系统的这个样子,经过 gzip 压缩,可以通过以下步骤查看该镜像中的内容: # mount /mnt/cdrom # mkdir /mnt/imgdir # gunzip 《 /mnt/cdrom/isolinux/initrd.img 》 /ext2img # mount -t ext2 -o loop /ext2img /mnt/imgdir # cd /mnt/imgdir # ls -F bin@ dev/ etc/ linuxrc@ lost+found/ modules/ proc/ ***in/ tmp/ var/ # cd modules # ls module-info modules.cgz modules.dep modules.pcimap pcitable 其中modules.dep为模块的注册文件,同时还有各种模块的依存关系。modules.cgz为cpio的打包文件,实际的各种驱动模块就在该文件中。我们可以通过以下命令解包: # cpio -idmv 《 modules.cgz 可以看到,解包出来的目录2.4.21-4XXX。进入该目录下的i386目录,就可以看到当前启动盘中支持的所以驱动程序: # ls 3c59x.o 3w-xxxx.o 8139cp.o 8139too.o 8390.o aacraid.o acenic.o aic79xx.o …… 如果希望在系统中加入需要的驱动程序,可以相应地修改这些文件,例如在模块中。自己的安装光盘。 硬盘上的系统启动过程与上面的,但是initrd的镜像文件简单一些,一般在initrd-2.4.XXX.img的虚拟文件系统中,在/lib目录下包含ext3。 o ***d.o lvm-mod.o 等就可以文件,解开硬盘上的ext3的文件系统。加载文件系统后,使用/lib/modules/2.4./XXX的modules.dep文件及内核目录中的各种驱动文件。 #!/bin/bash adb-eclair2.2 shell am start -a com.android.contacts.action.LIST_DEFAULT 回声“按菜单”|telnet 127.0.0.1 1080 对于我在`seq 0 10` 做 回声“睡眠 1000”|telnet 127.0.0.1 1080 回声“按菜单”|telnet 127.0.0.1 1080 完毕 猴子 --port 1080 -v -v netstat -an | 1080 须藤 adb-eclair2.2 转发 tcp:1080 tcp:1080 关于如何添加自己的库或者其他文件进入apk 参见 development/pdk/ndk 下的内容 简单的说把编译好的apk解开 解压 testapp.apk -d temp/ 建立目录 mkdir temp/lib/ mkdir temp/lib/armeabi 然后再把一切都准备好 除了其他文件也可以类似的处理 然后apkbuilder testapp.apk -v -rf temp/ 发酵 最后,本帖对于山寨厂这样自己整系统可以随意乱放native库或者执行程序的例外。。。 安装动态库到 /system/lib/ 目录 在工程的 Android.mk 文件中加如下内容 include $(CLEAR_VARS) LOCAL_PREBUILT_LIBS := gears.so include $(BUILD_MULTI_PREBUILT) 《?xml versio encodin?》 《!-- This version must agree with that in apps/common/res/apns.xml --》 《keywords versio》 《keyword usernam passwor/》 《keyword usernam passwor/》 《/keywords》 $(combo_target)CC := $($(combo_target)TOOLS_PREFIX)gcc$(HOST_EXECUTABLE_SUFFIX) $(combo_target)CXX := $($(combo_target)TOOLS_PREFIX)g++$(HOST_EXECUTABLE_SUFFIX) $(combo_target)AR := $($(combo_target)TOOLS_PREFIX)ar$(HOST_EXECUTABLE_SUFFIX) $(combo_target)OBJCOPY := $($(combo_target)TOOLS_PREFIX)objcopy$(HOST_EXECUTABLE_SUFFIX) $(combo_target)LD := $($(combo_target)TOOLS_PREFIX)ld$(HOST_EXECUTABLE_SUFFIX) 允许连接的客户端 echo ‘ALLOWEDNET’ 》》 /etc/default/distcc 连接以下机器进行编译 export DISTCC_HOSTS=‘172.20.120.88 172.20.120.67 172.20.120.65’ |
|
|
|
3.使用的/ proc中目录的文件监视驱动程序的状态
通过设备文件怎样访问到相应的驱动程序呢?它们中间有一个桥梁,那就是PROC文件系统,它一般会被加载到的/ proc目录。访问设备文件时,操作系统通常会通过查找/proc目录下的值,确定由哪些驱动模块来完成任务。如果proc文件系统没有加载,访问设备文件时就会出现错误。 Linux系统中proc文件系统是内核虚拟的文件系统,其中所有的文件都是内核中虚拟出来的,各种文件实际上是当前内核在内存中的参数。它就像是专门为访问内核而打开的一扇门,比如访问/proc/cpuinfo文件,实际上就是每次访问当前的CPU的参数,一次系统启动时系统都会通过/etc/fstab中设置的信息自动将proc文件系统加载到/proc目录下: # grep proc /etc/fstab none /proc proc 默认值 0 0 另外,也可以通过mount命令手动加载: # mount -t proc 无 /proc 通过/proc目录下的文件可以访问或更改内核参数,可以通过/proc目录驱动程序的信息。下面先让我们看一下/proc目录中的信息: #LS / PROC 1 4725 5032 5100 5248 5292加密KCORE分区14个4794 5044 5110 5250 5293设备kmsg PCI 2 4810 5075 5122 5252 5295 DMA ksyms中自3 4820 5079 5132 5254 5345驱动loadavg slabinfo 4个4831 5080 5151 5256 6 execdomains锁STAT 4316 4910个5081 5160 5258 7 FB LVM互换4317 4912 5082 5170 5262 70文件系统mdstat SYS 4318 4924 5083 5180 5271 8 FS meminfo中sysrq的触发器4319 4950 5084 5189 5287 9 IDE杂项SYSVIPC 4620 4963 5085 5232 5288 APM中断模块TTY 4676 5 5086 5242 5289 总线 iomem 安装正常运行时间 4680 5005 5087 5244 5290 cmdline ioports mtrr 版本 4706 5018 5088 5246 5291 cpuinfo irq net 需要知道的是,这些文件都是实时产生的虚拟文件,访问它们就是访问内存中真实的数据。这些数据是实时变化产生的,可以通过以下命令来查看文件的具体值: # cat /proc/interrupts CPU0 0: 50662 XT-PIC 定时器 1: 3 XT-PIC 键盘 2: 0 XT-PIC 级联 5: 618 XT-PIC ehci-hcd, eth1 8: 1 XT-PIC rtc 9: 0 XT -PIC u***-uhci、u***-uhci 11:50 XT-PIC u***-uhci、eth0 12:16 XT-PIC PS/2 鼠标 14:8009 XT-PIC ide0 15:0 XT-PIC ide1 NMI:0 ERR:0 其它文件的含意见表1所示。 的/ proc / SYS目录下的文件一般可以直接更改,相当于直接更改内核的运行参数,例如: # echo 1 》 /proc/sys/net/ipv4/ip_forward 上面的代码可以将内核中的数据包评论功能打开。另外 ,Linux 系统中提供了一些命令来查询系统的状态,如免费可以查看当前的内存使用情况,ide_info 可以查看ide设备的信息,:#ide_info / dev/had。类似的命令还有scsi_info,可以查看SCSI设备的信息。这些命令也是一般查询/proc目录下的文件,并返回结果。 系统初始化过程驱动程序的安装 在Linux过程中,系统上的硬件会被检测,基于检测到的结果安装程序会决定哪些模块需要在引导时被载入。Red Hat的程序安装anaconda,它提供了自动检测硬件,并且可以安装的机制。 但是,如果计算机内的部分硬件没有默认的驱动程序,比如SCSI内存卡,可以在启动后的启动dd下,输入“linux”,在加载完内核后,系统会自动提示插入驱动盘,可能会有机会把该硬件的Linux的驱动程序装入。 如果在安装系统时,某种硬件总是因为中断冲突(ISA总线的设备较常见,比如一块ISA网卡)没法正常驱动,或者是缺少驱动程序,那么可以在引导下输入“linux noprobe”。在这种模式下安装程序不会自动配置找到的硬件,可以自己来选择现有驱动,配置驱动程序的参数,或者选择用硬盘或软盘加载驱动程序。 定制引导盘 系统启动时是如何加载驱动的?下面让我们来看看一下帽子的安装过程是怎样引导的。 initrd.img 的虚拟文件系统加载到内存中。文件 ext2 文件系统的这个样子,经过 gzip 压缩,可以通过以下步骤查看该镜像中的内容: # mount /mnt/cdrom # mkdir /mnt/imgdir # gunzip 《 /mnt/cdrom/isolinux/initrd.img 》 /ext2img # mount -t ext2 -o loop /ext2img /mnt/imgdir # cd /mnt/imgdir # ls -F bin@ dev/ etc/ linuxrc@ lost+found/ modules/ proc/ ***in/ tmp/ var/ # cd modules # ls module-info modules.cgz modules.dep modules.pcimap pcitable 其中modules.dep为模块的注册文件,同时还有各种模块的依存关系。modules.cgz为cpio的打包文件,实际的各种驱动模块就在该文件中。我们可以通过以下命令解包: # cpio -idmv 《 modules.cgz 可以看到,解包出来的目录2.4.21-4XXX。进入该目录下的i386目录,就可以看到当前启动盘中支持的所以驱动程序: # ls 3c59x.o 3w-xxxx.o 8139cp.o 8139too.o 8390.o aacraid.o acenic.o aic79xx.o …… 如果希望在系统中加入需要的驱动程序,可以相应地修改这些文件,例如在模块中。自己的安装光盘。 硬盘上的系统启动过程与上面的,但是initrd的镜像文件简单一些,一般在initrd-2.4.XXX.img的虚拟文件系统中,在/lib目录下包含ext3。 o ***d.o lvm-mod.o 等就可以文件,解开硬盘上的ext3的文件系统。加载文件系统后,使用/lib/modules/2.4./XXX的modules.dep文件及内核目录中的各种驱动文件。 #!/bin/bash adb-eclair2.2 shell am start -a com.android.contacts.action.LIST_DEFAULT 回声“按菜单”|telnet 127.0.0.1 1080 对于我在`seq 0 10` 做 回声“睡眠 1000”|telnet 127.0.0.1 1080 回声“按菜单”|telnet 127.0.0.1 1080 完毕 猴子 --port 1080 -v -v netstat -an | 1080 须藤 adb-eclair2.2 转发 tcp:1080 tcp:1080 关于如何添加自己的库或者其他文件进入apk 参见 development/pdk/ndk 下的内容 简单的说把编译好的apk解开 解压 testapp.apk -d temp/ 建立目录 mkdir temp/lib/ mkdir temp/lib/armeabi 然后再把一切都准备好 除了其他文件也可以类似的处理 然后apkbuilder testapp.apk -v -rf temp/ 发酵 最后,本帖对于山寨厂这样自己整系统可以随意乱放native库或者执行程序的例外。。。 安装动态库到 /system/lib/ 目录 在工程的 Android.mk 文件中加如下内容 include $(CLEAR_VARS) LOCAL_PREBUILT_LIBS := gears.so include $(BUILD_MULTI_PREBUILT) 《?xml versio encodin?》 《!-- This version must agree with that in apps/common/res/apns.xml --》 《keywords versio》 《keyword usernam passwor/》 《keyword usernam passwor/》 《/keywords》 $(combo_target)CC := $($(combo_target)TOOLS_PREFIX)gcc$(HOST_EXECUTABLE_SUFFIX) $(combo_target)CXX := $($(combo_target)TOOLS_PREFIX)g++$(HOST_EXECUTABLE_SUFFIX) $(combo_target)AR := $($(combo_target)TOOLS_PREFIX)ar$(HOST_EXECUTABLE_SUFFIX) $(combo_target)OBJCOPY := $($(combo_target)TOOLS_PREFIX)objcopy$(HOST_EXECUTABLE_SUFFIX) $(combo_target)LD := $($(combo_target)TOOLS_PREFIX)ld$(HOST_EXECUTABLE_SUFFIX) 允许连接的客户端 echo ‘ALLOWEDNET’ 》》 /etc/default/distcc 连接以下机器进行编译 export DISTCC_HOSTS=‘172.20.120.88 172.20.120.67 172.20.120.65’ |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1800 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1629 浏览 1 评论
1096 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
735 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1684 浏览 2 评论
1943浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
744浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
578浏览 3评论
601浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
563浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 21:37 , Processed in 0.834023 second(s), Total 82, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号