Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1208400
  • 博文数量: 185
  • 博客积分: 495
  • 博客等级: 下士
  • 技术积分: 1418
  • 用 户 组: 普通用户
  • 注册时间: 2012-09-02 15:12
个人简介

治肾虚不含糖,专注内核性能优化二十年。 https://github.com/KnightKu

文章分类

全部博文(185)

文章存档

2019年(1)

2018年(12)

2017年(5)

2016年(23)

2015年(1)

2014年(22)

2013年(82)

2012年(39)

分类: LINUX

2014-02-18 14:21:40

1.工具和文档
acpica-tools(iasl, acpidump, acpixtract)
(依赖:gcc flex bison)

kernel/Doc/acpi/initrd_table_override.txt
2.安装编译acpica-tools。
$ tar xzf acpica-unix-VERSION.tar.gz
$ cd acpica-unix-VERSION
$ make iasl
$ make acpixtract
$ make acpidump
3.安装这些命令到bin下
install -m 555 -s generate/unix/acpixtract/obj/acpixtract /usr/bin/acpixtract
install -m 555 -s generate/unix/acpidump/obj/acpidump /usr/bin/acpidump
install -m 555 -s generate/unix/iasl/obj/iasl /usr/bin/iasl
4.dump系统的acpi table信息
[root@localhost tmp]# acpidump > acpidump
[root@localhost tmp]# acpixtract -a acpidump

Intel ACPI Component Architecture
ACPI Binary Table Extraction Utility version 20131218-64 [Jan  7 2014]
Copyright (c) 2000 - 2013 Intel Corporation

Acpi table [RSDP] - 36 bytes written to rsdp.dat
Acpi table [RSDT] - 84 bytes written to rsdt.dat
Acpi table [XSDT] - 132 bytes written to xsdt.dat
Acpi table [DSDT] - 7614 bytes written to dsdt.dat
Acpi table [FACS] - 64 bytes written to facs.dat
Acpi table [FACP] - 244 bytes written to facp.dat
Acpi table [APIC] - 3660 bytes written to apic.dat
Acpi table [SRAT] - 552 bytes written to srat.dat
Acpi table [SLIT] - 108 bytes written to slit.dat
Acpi table [SPCR] - 80 bytes written to spcr.dat
Acpi table [SPMI] - 65 bytes written to spmi.dat
Acpi table [SSDT] - 10818 bytes written to ssdt1.dat
Acpi table [MCFG] - 60 bytes written to mcfg.dat
Acpi table [HPET] - 56 bytes written to hpet.dat
Acpi table [DMAR] - 72 bytes written to dmar.dat
Acpi table [EINJ] - 304 bytes written to einj.dat
Acpi table [SSDT] - 242 bytes written to ssdt2.dat
5.编辑acpi table(SRAT 为例)
反汇编srat.dat为文本格式:
[root@localhost tmp]# iasl -d srat.dat

Intel ACPI Component Architecture
ASL Optimizing Compiler version 20131218-64 [Jan  7 2014]
Copyright (c) 2000 - 2013 Intel Corporation

Loading Acpi table from file srat.dat
Acpi Data Table [SRAT] decoded
Formatted output:  srat.dsl - 17730 bytes

会生成对应的srat.dsl文件,这个就可以直接用editor编辑了:
[1B2h 0434   4]             Proximity Domain : 00000004
[1B6h 0438   2]                    Reserved1 : 0000
[1B8h 0440   8]                 Base Address : 0000000000000000
[1C0h 0448   8]               Address Length : 0000000080000000
[1C8h 0456   4]                    Reserved2 : 00000000
[1CCh 0460   4]        Flags (decoded below) : 00000001
                                     Enabled : 1
                               Hot Pluggable : 1        0 --> 1
                                Non-Volatile : 0
[1D0h 0464   8]                    Reserved3 : 0000000000000000

[1D8h 0472   1]                Subtable Type : 01 [Memory Affinity]
[1D9h 0473   1]                       Length : 28

[1DAh 0474   4]             Proximity Domain : 00000004
[1DEh 0478   2]                    Reserved1 : 0000
[1E0h 0480   8]                 Base Address : 0000000100000000
[1E8h 0488   8]               Address Length : 0000000380000000
[1F0h 0496   4]                    Reserved2 : 00000000
[1F4h 0500   4]        Flags (decoded below) : 00000001
                                     Enabled : 1
                               Hot Pluggable : 1       0 --> 1
                                Non-Volatile : 0
[1F8h 0504   8]                    Reserved3 : 0000000000000000

[200h 0512   1]                Subtable Type : 01 [Memory Affinity]
[201h 0513   1]                       Length : 28
这里是把一段内存范围从非hotplug编程可hotplug,就是把对应的标志位改以下。
完了之后就要把.dsl的文本重新编译成汇编文件
6.重新生成srat table的汇编文件
[root@localhost tmp]# iasl -sa srat.dsl

Intel ACPI Component Architecture
ASL Optimizing Compiler version 20131218-64 [Jan  7 2014]
Copyright (c) 2000 - 2013 Intel Corporation

Table Input:   srat.dsl - 321 lines, 17930 bytes, 263 fields
Binary Output: srat.aml - 552 bytes

Compilation complete. 0 Errors, 0 Warnings, 0 Remarks
[root@localhost tmp]# ls | grep srat
srat.aml
srat.dat
srat.dsl
7.后面的操作很重要,其实也很简单
将新的新的acpi table的汇编文件*.aml拷贝到kernel/firmware/acpi格式的目录下面,
然后把这些.aml汇编文件打包成一个没有压缩的cpio文件:
[root@localhost tmp]# mkdir -p kernel/firmware/acpi
[root@localhost tmp]# cp srat.aml kernel/firmware/acpi
[root@localhost tmp]# find kernel | cpio -H newc --create > instrumented_initrd
3 blocks

8.追加initrad文件到新的instrumented_initrd后面,这样就是保证acpi table的override在initrd执行前完成
cat /boot/initrd >> instrumented_initrd
cp instrumented_initrd  /boot
修改grub的initrd项,让其指定到新的initrd。
Over.


阅读(2711) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~