momo zone

调核人的blog

Monthly Archives: 十月 2013

win8.1质量令人堪忧

WIN8.1中的metro程序有很多问题,遇到mail应用直接退出的问题我抓狂了好几天。

然后升级KB,重启卡死,我按电源键休眠,再唤醒竟然提示开始更新了。这软件质量……

然后重启又蓝屏了…… 0xc000012a

挂载hdd镜像到目录

假如之前用dd把整块硬盘都做成了镜像文件,现在要把其中一个分区挂载该怎么做?

这里使用比较傻瓜的方法:

1. 将镜像映射到loop设备

losetup /dev/loop0 image.img

2. 将loop设备再分区映射到dm设备

kpartx -a /dev/loop0

将在/dev/mapper下产生对应分区的dm设备

3. 将这个分区dm挂载到指定目录

mount /dev/mapper/loop0p1 /mnt/

4. 使用完之后,先umount /mnt

5. 然后losetup -d /dev/mapper/loop0p1 取消映射

PAT 页面属性表

PAT(页面属性表Page Attribute Table)

X86的页面属性表(PAT)能够在页面级的粒度上设置内存属性。PAT是对MTRR的补充,通过MTRR可以为物理地址区域设置内存类型。但是PAT比MTRR更灵活,因为它可以在页面级别设置属性,而且硬件上也不限制属性设置的数量。PAT相当灵活,即使多个虚拟内存地址映射到同一个物理内存地址,也不会引起内存类型的冲突。
通过PAT能够设置多种类型的内存属性,其中最常用的有4种:写回(Write-back),不缓存(Uncached),写联合(Write-combined)以及Uncached Minus。

PAT APIs
内核中提供了很多能够在页面级设置内存属性的API。为了避免混淆,需要小心地使用这些接口。下表中列出了这些接口、它们的功能以及它们与内存属性的关系。这些API都使用reserve_memtype()/free_memtype()接口来操作物理地址区域,以避免冲突。

-------------------------------------------------------------------
API                    |    RAM   |  ACPI,...  |  Reserved/Holes  |
-----------------------|----------|------------|------------------|
                       |          |            |                  |
ioremap                |    --    |    UC-     |       UC-        |
                       |          |            |                  |
ioremap_cache          |    --    |    WB      |       WB         |
                       |          |            |                  |
ioremap_nocache        |    --    |    UC-     |       UC-        |
                       |          |            |                  |
ioremap_wc             |    --    |    --      |       WC         |
                       |          |            |                  |
set_memory_uc          |    UC-   |    --      |       --         |
 set_memory_wb         |          |            |                  |
                       |          |            |                  |
set_memory_wc          |    WC    |    --      |       --         |
 set_memory_wb         |          |            |                  |
                       |          |            |                  |
pci sysfs resource     |    --    |    --      |       UC-        |
                       |          |            |                  |
pci sysfs resource_wc  |    --    |    --      |       WC         |
 is IORESOURCE_PREFETCH|          |            |                  |
                       |          |            |                  |
pci proc               |    --    |    --      |       UC-        |
 !PCIIOC_WRITE_COMBINE |          |            |                  |
                       |          |            |                  |
pci proc               |    --    |    --      |       WC         |
 PCIIOC_WRITE_COMBINE  |          |            |                  |
                       |          |            |                  |
/dev/mem               |    --    |  WB/WC/UC- |    WB/WC/UC-     |
 read-write            |          |            |                  |
                       |          |            |                  |
/dev/mem               |    --    |    UC-     |       UC-        |
 mmap SYNC flag        |          |            |                  |
                       |          |            |                  |
/dev/mem               |    --    |  WB/WC/UC- |    WB/WC/UC-     |
 mmap !SYNC flag       |          |(from exist-|  (from exist-    |
 and                   |          |  ing alias)|    ing alias)    |
 any alias to this area|          |            |                  |
                       |          |            |                  |
/dev/mem               |    --    |    WB      |       WB         |
 mmap !SYNC flag       |          |            |                  |
 no alias to this area |          |            |                  |
 and                   |          |            |                  |
 MTRR says WB          |          |            |                  |
                       |          |            |                  |
/dev/mem               |    --    |    --      |       UC-        |
 mmap !SYNC flag       |          |            |                  |
 no alias to this area |          |            |                  |
 and                   |          |            |                  |
 MTRR says !WB         |          |            |                  |
                       |          |            |                  |
-------------------------------------------------------------------

针对设备驱动的高级APIs
A. 如果要将页面导出到用户空间,可以使用接口remap_pfn_range, io_remap_pfn_range,,vm_insert_pfn
在驱动程序中,有时会希望将一些页面导出到用户空间。此时可以使用mmap接口与下列函数的组合。
1) pgprot_noncached()
2) io_remap_pfn_range() 或 remap_pfn_range() 或 vm_insert_pfn()
在PAT的支持下,Linux引入了一个新的API,pgprot_writecombine。因此,驱动能够持续地使用上述操作序列。首先,在步骤1调用pgprot_noncached()或pgprot_writecombine()。然后在采取步骤二。
步骤二为了确保不会产生映射冲突,将跟踪内存类型列表中那些标记为UC或WC的区域。
需要指出的是,这组API仅仅对IO地址空间有效,对RAM则无效。如果驱动程序希望导出一个RAM区域,则需在步骤1之前再执行一个步骤0,即调用set_memory_uc()或set_memory_wc(),同时也需要跟踪那些页面的使用情况,在页面被释放到空闲池之前调用函数set_memory_wb()。

注意:
上面表格中的“–”符号表示“不推荐使用此API”。其中一些是内核严格规定不能使用的。其它一些,虽然目前没有这么严格的限制,但是将来有可能会出现这样的情况。
对于通过/sys或/proc进行的ioremap与pci访问,如果在被访问的地址上存在冲突,将返回一个较为严格的内存类型。比如:如果已经存在了uncached映射,那么操作ioremap_wc()会返回uncached映射而不是申请的write-combine。
set_memory_[uc|wc]和set_memory_wb需要成对的使用,此时,驱动将首先申请一个uc或wc区域,在使用之后,再将该区域切换为wb。
对/proc/mtrr的操作已经不再被推荐了,取而代之,可以使用基于PAT的接口。
驱动程序可以使用ioremap_[uc|wc]访问PCI BARs,相应的访问类型为[uc|wc]。
驱动程序可以使用set_memory_[uc|wc]为RAM区域设置访存类型。

PAT调试
如果使能了CONFIG_DEBUG_FS选项,仅能够通过下面的方式检查PAT的内存类型列表。
# mount -t debugfs debugfs /sys/kernel/debug
# cat /sys/kernel/debug/x86/pat_memtype_list
PAT memtype list:
uncached-minus @ 0x7fadf000-0x7fae0000
uncached-minus @ 0x7fb19000-0x7fb1a000
uncached-minus @ 0x7fb1a000-0x7fb1b000
uncached-minus @ 0x7fb1b000-0x7fb1c000
uncached-minus @ 0x7fb1c000-0x7fb1d000
uncached-minus @ 0x7fb1d000-0x7fb1e000
uncached-minus @ 0x7fb1e000-0x7fb25000
uncached-minus @ 0x7fb25000-0x7fb26000
uncached-minus @ 0x7fb26000-0x7fb27000
uncached-minus @ 0x7fb27000-0x7fb28000
uncached-minus @ 0x7fb28000-0x7fb2e000
uncached-minus @ 0x7fb2e000-0x7fb2f000
uncached-minus @ 0x7fb2f000-0x7fb30000
uncached-minus @ 0x7fb31000-0x7fb32000
uncached-minus @ 0x80000000-0x90000000
这个列表说明了物理地址区域以及访问这些区域的PAT设置。
另外,通过内核启动选项“debugpat”可以获取更加详细的PAT调试信息。设置此参数后,各种调试信息将打印在dmesg日志中。

入Fostex HP-A8 + ATH-W1000X

虽然是个老耳机了但我最近才入手,写点什么吧,毕竟有点意外。

手里只有DT860和W1000X 这两个对比有点不公平,价格差一倍(指W1000X本土价格   >_<b) ,其他听过的有DT880 ,DT990,HD650,W1000等不超过10个。

第一耳朵听上去感觉声音很紧,声场狭窄,就连声压都很低,我大概提高6dB才和dt860的声压差不多,然后就感觉高频要比DT860好上不少,非常晶莹剔透的感觉,听女声感觉歌手变年轻了不少。人声比DT860靠后,横向声场和DT860差不多但纵向要好很多。然后就是低频,下潜总体上和DT860差不多,但量多而且弹性更好。解析方面排除高频延伸的影响应该都差不多。换成DT860,顿时感觉声音变平面话了,一切都变得更加直白,平淡。总得来说我感觉W1000X是和HD650,DT880素质更相似的耳机,最适合听轻音乐,小编制,ACG(录音好的),特别是JAZZ 。一反我之前对铁三角性价比低,音染重的印象。当然对于行货4000多的价格而言还是没有任何性价比。

上述对比基于fostex HP-A8gg

在谈HP-A8前我先谈谈我当初听HA5000+W1000X的感受。首先的一个就是三频过渡自然,高频毛刺基本没有,中频饱满。听小编制的时候空间感非常好。但这些在HP-A8下面都感觉差一些,取代的是更加刺激一些的声音。根据我个人的喜好也是相当矛盾的。不过HP-A8高频段明显比HA5000好,对比直推提升最明显的是分离度,一开始我还以为我的耳朵偏音了。固件更新到2.13B才算ok,尽管还是beta版。在linux下可以直接识别为声卡,用mplayer听现场对比板载声卡一耳朵区别。

关于DSD解码的真真假假看这个讨论:

http://www.andaudio.com/phpbb3/viewtopic.php?f=25&t=116156

IMG_0057

IMG_9367 IMG_9366 IMG_9364 IMG_9361 IMG_9359 IMG_9358 IMG_9356 IMG_9355 IMG_9352 IMG_9350 IMG_9346

grub跑在usb上作boot分区的几点注意

分区要求:使用fdisk ,关闭DOS兼容。但还是不要使用扇区为一个block单元,而是使用传统的柱面,也就是分出来的都是柱面对齐。

安装:使用grub-install –root-directory=/mnt/USBMOUNT /dev/sdX 最简单。

文件系统:ext2足够,大部分情况都是只读。但这里有个问题困扰了我两天:mkfs.ext2会自动侦测媒介适合的block-size,我所有的usb硬盘和u盘都被分成了1024B的block,这在linux下当然没有什么问题。但在grub下,当载入比较大的(40M+)initrd时会发现速度极其低下估计连200KB都不到。调整过所有我觉得与板子usb相关的设置都无效,最后用mkfs.ext2 -b 4096 /dev/sdX 调整为4KB 问题解决。不过我后来换了块主板(原来是supermicro X8)到supermicro X9 就没有任何问题,无论是何种blocksize。这肯定是主板bios相关程序的bug,grub读取文件依赖bios调用。