我想打开我的U盘,提示未格式化又无法格式化,在DOS状态下格式化U盘,提示IOCTL调用有错误,是什么意思尼?

我想打开我的U盘,提示未格式化又无法格式化,在DOS状态下格式化U盘,提示IOCTL调用有错误,是什么意思尼?,第1张

U盘不支持标准的格式化方式的意思。

打开后选中你的u盘然后点下面的模式用0或者1重置,再格式化。

如果还不行的话下载个ChipGenius软件确定你u盘的芯片,然后根据芯片型号到此网的u盘存储技术专区下载此芯片的专用量产工具根据教程量产一下你的u盘就可以了。

格式化的种类

盘片格式化牵涉两个不同的程序:低级与高级格式化。前者处理盘片表面格式化赋与磁片扇区数的特质;低级格式化完成后,硬件盘片控制器(disk controller)即可看到并使用低级格式化的成果;后者处理“伴随着 *** 作系统所写的特定信息”。

低级格式化

低级格式化(Low-Level Formatting)又称低层格式化或物理格式化(Physical Format),对于部分硬盘制造厂商,它也被称为初始化(initialization)。最早,伴随着应用CHS编址方法、频率调制(FM)、改进频率调制(MFM)等编码方案的磁盘的出现,低级格式化被用于指代对磁盘进行划分柱面、磁道、扇区的 *** 作。现今,随着软盘的逐渐退出日常应用,应用新的编址方法和接口的磁盘的出现,这个词已经失去了原本的含义,大多数的硬盘制造商将低级格式化(Low-Level Formatting)定义为创建硬盘扇区(sector)使硬盘具备存储能力的 *** 作。现在,人们对低级格式化存在一定的误解,多数情况下,提及低级格式化,往往是指硬盘的填零 *** 作。

对于一张标准的1.44 MB软盘,其低级格式化将在软盘上创建160个磁道(track)(每面80个),每磁道18个扇区(sector),每扇区512位位组(byte);共计1,474,560位组。需要注意的是:软盘的低级格式化通常是系统所内置支持的。通常情况下,对软盘的格式化 *** 作即包含了低级格式化 *** 作和高级格式化 *** 作两个部分。

高级格式化

高级格式化又称逻辑格式化,它是指根据用户选定的文件系统(如FAT12、FAT16、FAT32、NTFS、EXT2、EXT3等),在磁盘的特定区域写入特定数据,以达到初始化磁盘或磁盘分区、清除原磁盘或磁盘分区中所有文件的一个 *** 作。高级格式化包括对主引导记录中分区表相应区域的重写、根据用户选定的文件系统,在分区中划出一片用于存放文件分配表、目录表等用于文件管理的磁盘空间,以便用户使用该分区管理文件。

在windows系统中应用程序不能直接访问硬件,必须通过驱动程序,而硬件千变万化,相应的驱动程序也有很大的变化, *** 作系统必须有一个抽象的层次来弥合应用程序和驱动程序。

windows系统沿用了unix系统中的概念,在unix系统中,一切外部资源都是文件,文件可以很好的抽象硬件,对于系统核心而言,一切外设不过就是输入输出的数据,类同于文件 *** 作。在windows中提供一切应用程序访问硬件的API就是我们熟知的文件 *** 作函数,就是CreateFile,OpenFile,ReadFile,WriteFile,等等,他还有一个特殊的函数,理论上并不需要这个函数,但是有了这个函数可以简化应用程序设计,就IOControl。它可以让应用程序向外设发送指令(实际上,WriteFile完全可以替代它的用途)。这些基本的访问驱动程的API构成了基础的抽象,其他的应用程序API也要通过这些函数来访问外设,只是他们根据特定的用途进行了特化,比如WinSock他最终访问网卡还是要通过这些基本的IO函数的。

IOCTL错误,就是说应用程序在调用IOControl这个函数的时候发生了故障,可能是硬件故障,也可能是错误的驱动程序,或者这个U盘不支持标准的格式化方式。

微软知识库:

http://support.microsoft.com/kb/836618/zh-cn (英文)

其他可参考

http://bbs.pcicp.com/showthread.php?t=177764

1、显示错误:unknown field 'ioctl' specified in initializer

解决办法,查看内核include/linux/fs.h文件,发现里边定义的struct file_operations中没有ioctl,这里我们用.unlocked_ioctl取代,形参去掉 struct inode*。

2、在应用程序中,将ioctl替换为unlocked_ioctl后,会出现以下错误:undefined reference to `unlocked_ioctl'。因为系统调用ioctl是没有改变的,还是原来的系统调用接口,只是系统调用的实现中,ioctl()变成了unlocked_ioctl,在应用层你根本不用关注内核中的这些实现上的改变,你只需要按照系统调用的用法用就可以了。所以把应用程序里的unlocked_ioctl改为ioctl,编译,OK,通过。

3、驱动编译完成,在开发板上insmod,出现以下错误:

WARNING: at lib/kobject.c:595 kobject_put+0x50/0x64()

kobject: '扑' (cbc60a00): is not initialized, yet kobject_put() is being called.

---[ end trace da227214a82491b9 ]---

insmod: cannot insert 'led_dev.ko': Cannot allocate memory

原来是忘了写内存申请的代码,添加kmalloc和memset。

4、再次insmod,出现下列错误代码:

Unable to handle kernel paging request at virtual address 7f008820

pgd = cbc70000

[7f008820] *pgd=00000000

Internal error: Oops: 5 [#1]

Modules linked in: led_dev(+)

CPU: 0Tainted: GW(3.0.1 #439)

PC is at led_init+0xa8/0x108 [led_dev]

LR is at kobj_map+0x144/0x154

pc : [<bf0020a8>]lr : [<c0246e70>]psr: 60000013

sp : cbc6bf10 ip : cbc6beb0 fp : cbc6bf24

r10: 00000000 r9 : bf002000 r8 : cbc6a000

r7 : 00000000 r6 : bf0002bc r5 : 00000000 r4 : 00000000

r3 : 00000000 r2 : 00000000 r1 : 7f008000 r0 : 00000000

Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment user

Control: 00c5387d Table: 5bc70008 DAC: 00000015

Process insmod (pid: 112, stack limit = 0xcbc6a268)

Stack: (0xcbc6bf10 to 0xcbc6c000)

bf00: 00000000 c07463c0 cbc6bf7c cbc6bf28

bf20: c00343c8 bf00200c cbc6bf64 cbc6bf38 c0073e24 00000000 00000000 00000000

bf40: 00000000 0000ef52 000d5bf9 bf0002bc 00000000 0000ef52 000d5bf9 bf0002bc

bf60: 00000000 c0034ce8 cbc6a000 00000000 cbc6bfa4 cbc6bf80 c0085960 c0034398

bf80: c00e8738 c00e8610 402004a8 000dfcf8 00000000 00000080 00000000 cbc6bfa8

bfa0: c0034b40 c00858e0 402004a8 000dfcf8 00b5d038 0000ef52 000d5bf9 ffff5f01

bfc0: 402004a8 000dfcf8 00000000 00000080 00000069 00000001 be9c2e64 be9c2e68

bfe0: be9c2e68 be9c2b14 00021cfc 402c1d74 60000010 00b5d038 5fffe821 5fffec21

[<bf0020a8>] (led_init+0xa8/0x108 [led_dev]) from [<c00343c8>] (do_one_initcall+0x3c/0x188)

[<c00343c8>] (do_one_initcall+0x3c/0x188) from [<c0085960>] (sys_init_module+0x8c/0x1a4)

[<c0085960>] (sys_init_module+0x8c/0x1a4) from [<c0034b40>] (ret_fast_syscall+0x0/0x30)

Code: e59f0060 eb52980e ea00000b e59f1058 (e5910820)

---[ end trace da227214a82491b9 ]---

Segmentation fault

最后是各种百度,各种谷歌,参考别人的驱动,发现它们的开发板硬件地址并不是自己写的头文件,而是调用mach中已经定义好的头文件,好吧,寻找相应开发板,相应端口的地址头文件,在驱动文件中添加以下头文件:

#include <mach/map.h>

#include <mach/regs-gpio.h>

#include <mach/gpio-bank-m.h>

Ok,打完收工,开发板,测试。运行无阻。完成。

5、在做到DS18B20温度测试模块驱动的时候,看到网上的代码有些函数可以直接对引脚的功能进行设置,比如:s3c2410_gpio_cfgpin(DQ_PIN, DQ_PIN_OUTP)但是对应于我的s3c6410的开发板就不知道用什么函数了,网上找了半天,发现以上函数是在#include <plat/gpio-cfg.h>中,6410中对应的函数为:extern int s3c_gpio_cfgpin(unsigned int pin, unsigned int to)

6、最近学习移植linux内核,移植了新的linux内核以及挂载了新的NFS之后, 重新测试led驱动,发现安装模块以后,运行测试程序会出现以下错误:

-/bin/sh: ./main: not found(main为主机上编译好的测试程序)

原因:

编译busybox的时候选择了静态编译:

Build Options->

Build BusyBox as a static binary (no shared libs)

Build with Large File Support (for accessing file>2GB)

如果选择 Build BusyBox as a static binary (no shared libs) 方式进行编译时,所需的库已经与程序静态地链接在一起,这些程序不需要额外的库就可以单独运行,但是自己编写的程序在文件系统上运行必须采用静态编译,否则会报诸如:bin/sh: main :not found的错误。

静态编译如:

arm-linux-gcc –static main.c –o main

7.按照普通方法安装配置tftp,并且关闭了防火墙,但是在开发板上tftp主机,总会报错:

tftp: server error: (0) Permission denied

解决办法:

修改文件 /etc/sysconfig/selinux,设定其中的

SELINUX=disabled

然后重启电脑即可


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7450291.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-05
下一篇2023-04-05

发表评论

登录后才能评论

评论列表(0条)

    保存