ACPI:由BIOS、硬件、操作系统共同支持来实现的

基础补充4:ACPI - leaf - ------坚持雅操------

 

ACPI的功能:略

IRQ的数目是通过ACPI来实现扩充的。

ACPI的各个状态

G0(正常)—————–G1(睡眠)—————-G2(可网络唤醒等关机状态)———G3(关机)
|S0                              |S1-S4                        |S5
|C/D/P State

S State:

cat /proc/acpi/sleep

S0 S3 S4 S5

-————————

S0:正常状态
S3:待机状态:STR:当前状态存储到内存,未关机
S4:休眠状态:STD:当前状态存储到硬盘并关机,从新开机后回到关机前的状态
S5:关机状态:包含G2、G3

C State:调CPU的状态,如CPU的电压,暂停CPU执行的指令

cat /proc/acpi/processor/CPU0/power

D State:调设备的用电量:屏幕亮度,空闲时关闭网卡等

P State:调CPU的频率

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies

2900000 2200000 1700000 800000

了解这两个文件对以后制作LFS很有帮助。

1、调出initrd.img 里的init文件

mv initrd.img initrd.gz
gunzip initrd.gz
cpio -id < initrd 就能看到了

基础补充3:initrd.img里的init和/etc/rc.sysinit - leaf - ------坚持雅操------

 
-————————–FC4 init内容—————————–
#———开启nash用于执行以下内容,nash同bash,比较小巧。#!是固定格式。—–

#!/bin/nash      

#——加载3目录。initrd里面已经有这3个“空”目录了,加载到内存中供kernel使用 ——–
#——这3个目录里的文件将由kernel产生
#—–需要注意的是/目录是由kernel产生的,而不是initrd提供的。
#—–procfs和sysfs是内核层的文件,除了内核,其他都改不了。用于存储硬件和进程相关信息。
#—–/dev文件 以tmpfs文件系统来存储
#—–tmpfs是建立在内存中的,刚开机由于没有实体设备被加载,所有产生的信息都存在内存中。

mount -t proc /proc /proc
setquiet
echo Mounted /proc filesystem
echo Mounting sysfs
mount -t sysfs /sys /sys
echo Creating /dev
mount -o mode=0755 -t tmpfs /dev /dev

#———建立设备文件,console用于显示,null和zero起到垃圾桶的作用 ————-
#——mknod 主要是建b c

mknod /dev/console c 5 1
mknod /dev/null c 1 3
mknod /dev/zero c 1 5

#———————建立伪终端目录、临时暂存—————————–
#—–/dev/pts 给ssh和xterm用。
#—-/dev/shm 用于提供暂存
#—-udev用于动态的管理设备文件,特别是热插拔的设备。改善/dev的问题
#—-udev配合/sysfs使用。

mkdir /dev/pts
mkdir /dev/shm
echo Starting udev
/sbin/udevstart          #自动从/sys中找到热插拔设备
echo -n “/sbin/hotplug” > /proc/sys/kernel/hotplug

#——–加载模块——-

echo “Loading jbd.ko module”
insmod /lib/jbd.ko
echo “Loading ext3.ko module”
insmod /lib/ext3.ko

#—–mkrootdev 主要是把grub.conf里面的 root (hd0,0) 的路径先建立好。
#—–将找到的root路径:/dev/root  挂载到initrd的/sysroot下
#——然后用switchroot到该目录。正式切到硬盘操作系统的环境中。switchroot同chroot

/sbin/udevstart
echo Creating root device
mkrootdev /dev/root
echo Mounting root filesystem
mount -o defaults –ro -t ext3 /dev/root /sysroot
echo Switching to new root
switchroot –movedev /sysroot

2、/etc/rc.sysinit

设置3个变量    HOSTNAME,HOSTTYPE,unamer

/etc/sysconfig/network                   设置网络状态
HOSTNAME=localhost                  HOSTNAME变量设值
mount -n -t proc /proc /proc            挂载/proc
/proc/bus/usb                                   检查USB设备文件所需的目录
mount -n -t sysfs /sys /sys >/dev/null 2>&1    挂载/sys
. /etc/init.d/functions                         设置环境变量
设置SELINUX
打印welcome to
/bin/dmesg                                         设置系统能够记录的等级,当前设置值是1
/sbin/start_udev                                 开启udev机制,/etc/udev下所有规则可套用
cat /proc/cmdline                              读取grub.conf vmlinuz这一行
/proc/sys/kernel/modprobe             加载各硬件模块
mount -n /dev/pts                             产生一个tty接口
sysctl -e -p /etc/sysctl.conf >/dev/null 2>&1    加载sysctl.conf 设置值
/etc/sysconfig/clock                         设置时间种类,如UTC
/sbin/hwclock                                   设置系统时间
设置hostname
/proc/acpi                                          开启ACPI功能
/sbin/zfcpconf.sh                               scsi相关
/etc/mdadm.conf                               raid相关
/sbin/lvm.static                                  LVM相关
. /etc/sysconfig/readonly-root           以只读方式挂载文件系统
mount -n -o remount,rw /                  以可读可写方式挂载根目录
清空SElinux表
(> /etc/mtab) &> /dev/null                 清空/etc/mtab
从新挂载系统目录
/usr/bin/rhgb                                       加载图形开机画面背景,并显示开机进度条
进行系统初始设置
清除相关文件
mkdir -m 1777 -p /tmp/.ICE-unix >/dev/null 2>&1 设定X window所要使用的目录
swapon -a -e                                       开启swap交换空间
/usr/sbin/system-config-network-cmd        设置网络
dmesg -s 131072 > /var/log/dmesg        写入dmesg信息
touch /.autofsck &> /dev/null                    建立.autofsck文件,判断是否正常启动还是非正常断电
/usr/bin/rhgb-client –sysinit                      告知系统要离开这个脚本了,继续则转到inittab脚本   

磁道结构:
bootloader-partition table-magic number —stage1.5—分区(boot sector(512B)+存储区域)
|<—————MBR————————->|

bootloader功能:stage1

加载扇区:各扇区之间切换
加载核心:通过stage1.5—读取stage2—配置文件—核心

GRUB:

MBR和stage1的区别

基础补充2:bootloader和GRUB - leaf - ------坚持雅操------

配置文件-核心加载方式
链接加载

rootnoverify (hd0,0)   指定bootloader所在分区
chainloader +1           指定为第一个扇区

BIOS启动过程:
开机
->cpu运行
 ->CPU通过北桥找到bios程序
  ->bios解压自身到内存中
   ->bios检查个硬件信息并唤醒
    ->bios读取南桥的cmos信息
      ->bios把信息整合成smbios表
       ->屏幕显示信息(按del键可进bios界面)
        ->post自检
         ->POST将临时硬件(USB)写入SMBIOS
          ->BIOS将MBR中的stage1加载到内存中

  ->stage1读取stage1.5以识别文件系统
   ->stage1读取stage2
    ->stage2读取/boot/grub/grub.conf 并提供选择界面
     ->将kernel载入到内存中
      ->kernel在内存中建立rootfs空间,将initrd载入到rootfs中
       ->按intird里面的init执行相关操作(详谈)

->kernel chroot到硬盘的文件系统中 (详谈)
 ->执行/etc/inittab
  ->显示登陆界面

备注:其实黑苹果很重要的部分就是改SMBIOS信息。dsdt就有这个功能

BIOS功能:

自检所有芯片,并通知芯片启动
记录设定值到CMOS中
分配IRQ(中断处理)
加载引导程序

其他:

linux下通过dmidecode导出SMBIOS

type 0:BIOS Information
type 1:System Information 指机型
type 2:Base Board Information
type 3:Chassis Information
type 4:Processor Information
type 7:Cache Information   CPU高速缓存信息
type 8:Port Connector Information
type 9:System Slot Information
type 13:BIOS Language Information
type 15:System Event Log
type 16:Physical Memory Array
type 17:Memory Device
type 19:Memory Array Mapped Address

FakeSMC文件设置的机型必须与smbios.plist相对应

8、修改FakeSMC - leaf - ------坚持雅操------

 
REV值设定:
        MacPro3,1                1.25f4        ASUPAAAE
        MacPro4,1                1.39f5        ATkPAAAF
        MacPro5,1                1.39f11        ATkPAAAR
        iMac8,1                1.30f1        ATAPAAAB
        iMac9,1                1.45f0        AUUPAAAA
        iMac10,1                1.53f13        AVMPAAAT
        iMac11,1                1.54f36        AVQPAAA2
        iMac12,1                1.72f5        AXIPAAAF   
        MacBookPro5,1        1.33f8        ATMPAAAI
        MacBookPro5,1        1.33f8        ATMPAAAI
        MacBookPro6,1        1.58f16        AVgPAAAW
        MacBookPro7,1        1.62f6        AWIPAAAG
        MacBookPro8,1        1.68f96        AWgPAACW

smc-compatible值设定:
        MacPro3,1                smc-napa
        MacPro4,1                smc-thurley
        MacPro5,1                smc-thurley
        iMac9,1                smc-napa
        iMac10,1                smc-mcp
        iMac11,1                smc-piketon
        iMac12,1                smc-huronriver   
        MacBookPro5,1        smc-mcp
        MacBookPro5,5        smc-mcp
        MacBookPro6,1        smc-piketon
        MacBookPro7,1        smc-mcp
        MacBookPro8,1        smc-huronriver

tjmax值设定:

通过aida64extreme查看,CPU最高工作温度

参考:

http://bbs.pcbeta.com/viewthread-799385-1-1.html
http://bbs.pcbeta.com/viewthread-973896-1-1.html

驱动ATI显卡的一般步骤

1、确认你的显卡ID,可以通过win下的GPU-Z确定

2、添加ID到相关kext里的Info.plist里面
3、提取rom修改你的接口信息
4、修改ATIx000Contrller.kext>Contents>MacOS> ATIx000Contrller文件 (解决输出问题)
5、加载你修改的FB

第2步说明:

ATI显卡必备驱动
  ATI4600Controller.kext (加入ID)
  ATIFramebuffer.kext
  ATISupport.kext
  ATIRadeonX2000.kext (确认有ID)
  ATIRadeonX2000GA.plugin
  ATIRadeonX2000GLDriver.bundle
  ATIRadeonX2000VADriver.bundle

参考:
Thinkpad E40 ML 完善过程分享
ThinkPad E40黑苹果折腾大结局

第4步说明:

各接口代码前端:

LVDS:02 00 00 00 40 00 00 00 09 01 00 00
HDMI:00 08 00 00 04 02 00 00 00 71 00 00
VGA: 10 00 00 00 10 00 00 00 00 01 00 00
DVI:   04 00 00 00 14 02 00 00 00 01 00 00
DP:    00 04 00 00 04 06 00 00 00 71 00 00

后端:

txmit enc hotplugin senseid 还有8位

代码生成器:

BuildFramebuffer.app

参考:

ATI 5系和6系显卡驱动&修改FB探讨
从零开始完美玩转苹果ATI驱动+QE/CI+多屏 :这篇讲原理,不懂可以看下面
可以驱动所有ATI 4330

-————————————————————————
DSDT.aml其实就是BIOS的SMBIOS文件。非SMBIOS.plist
-————————————————————————

一、导出DSDT、rom、SSDT等文件

7、修改DSDT.aml - leaf - ------坚持雅操------

 7、修改DSDT.aml - leaf - ------坚持雅操------
1、ACPI tool 可以导出DSDT.bin 和多个SSDT.bin。我们直接把后缀改位aml即可
2、video debug可以调出:显卡.rom

二、修改DSDT.aml

我一般直接用这个软件修复,也可以使用DSDTFixer先修复,再用DSDT_editor修复
1、点open打开DSDT.aml文件

备注:DSDT_editor也可以直接导出DSDT的原始文件。

7、修改DSDT.aml - leaf - ------坚持雅操------

 打开后显示如下:

7、修改DSDT.aml - leaf - ------坚持雅操------

2、 先自动修复,点fixerrors

7、修改DSDT.aml - leaf - ------坚持雅操------

 3、我碰到了3种警告

1> 把 _T_0  替换为T_0即可
2>Possible operator timeout is ignored

将 Acquire (MUTE, 0x03E8)改为Acquire (MUTE, 0xFFFF)

3>not all control paths return a value (SIOS)

最下面的}之前插入一行,添加 Return (Zero)

    错误修复参考:http://roderickvincent.com/post/2012-03-11/40031714899

4、打补丁,DSDT_editor里面包含很多补丁了。

7、修改DSDT.aml - leaf - ------坚持雅操------

 

5、手动添加修改信息
通过IORegisryExplorer看接口信息,然后在DSDT_editor里面找到位置进行更改

7、修改DSDT.aml - leaf - ------坚持雅操------

参考:http://bbs.pcbeta.com/viewthread-1020621-1-1.html

6、导出aml文件即完成DSDT.aml

三、添加显卡信息、声卡信息

用iDSDT导入DSDT.aml 和显卡.rom文件,声卡coder信息
iDSDT会自动帮我们导出aml文件。

7、修改DSDT.aml - leaf - ------坚持雅操------

注意:iDSDT导出来的文件是放在桌面上的,若名字相同导出来的aml文件就没用了

推荐:
http://bbs.pcbeta.com/viewthread.php?tid=832974
http://bbs.pcbeta.com/viewthread-826965-1-1.html

四、修改SSDT.aml

用DSDT_editor文件修复好即可。导出aml文件

五、将这些文件放入/Extra文件夹下,配置变色龙添加文件地址即可。

1、制作安装盘

2、修改安装盘

镜像盘制作好之后,我们直接把安装会碰到的问题提前解决掉(win下操作)

一、根目录下建文件夹/Extra/Extensions,放入以下驱动:

FakeSMC.kext,一定要2.5版本。系统运行正常后,可再换新版本以获得其他功能
NullCPUPowerManagement.kext
AppleACPIPS2Nub.kext
ApplePS2Controller.kext
/usr/sbin/myfix        用于修复权限

二:移出/System/Library/Extensions/目录下的文件:

AppleIntelCPUPowerManagementClient.kext
AppleIntelCPUPowerManagement.kext
IOBluetoothFamily.kext
IOBluetoothHIDDriver.kext
备注:其实有些主板是支持原声ACPI驱动的

  移出是为了防止进不了安装界面

三、可选

删除S/L/E/AppleGraphicsControl.kext/Contents/PlugIns/ApplePolicyControl.kext

删除/System/Library/Coreservices/PlatformSupport.plist
删除S/L/E/AppleHDA.kext

3、安装

安装应该不会出现什么问题,如出现白屏也不要马上重启,只要硬盘闪着红灯都是在安装的
安装完成后,终端下将/E/E下面的kext放入/S/L/E下面

4、重启

用U盘引导进入,进入的时候也许会出现五国
参考远景的五国解决:http://bbs.pcbeta.com/viewthread-863656-1-1.html

5、第一次进系统

1、把/Extra/Extensions下面的kext都复制到/S/L/E下面去
2、安装变色龙引导
备注:DSMOS has arrived是正常的,正常启动都有这句,一般到这句就快进桌面了。

6、重启,使用参数-v-x  -f  进入   (选择盘符界面直接输入即可)

如遇到五国,参考远景的五国解决
参数说明:

-v:Verbose模式,即调试模式。该模式显示所有启动日志,用于查找错误。
-x:安全模式,加载全部kext以解决兼容性问题。
-s:单用户模式
-f :启动时修复磁盘,一般在更换过kext后第一次重启时使用。

备注:

变色龙选择启动盘的时候直接输入即可

7、驱动的安装

1、网卡驱动:一般论坛会提供pkg文件,安装上即可

2、声卡驱动:使用MultiBeast把声卡驱动安装上,也可以使用万能声卡
3、显卡驱动:

修改kext,并用kext wizard安装和修复权限。
创建DSDT.aml (可选)

4、完善驱动功能
备注:

mac驱动是被动加载,识别了会自动添加驱动,不识别就安装不了。

8、添加其他功能

新版FakeSMC:可以自动降频,检测风扇转速,温度等。
添加SSDT.aml:节能有关。
完善DSDT.aml文件。
创建org.apple.Boot.plist、SMBIOS:用Chameleon Wizard添加。

效果图如下:3、黑苹果安装记录 - leaf - ------坚持雅操------

3、黑苹果安装记录 - leaf - ------坚持雅操------

-——————————————————————————————–
说明:以下都是windows下制作。我用了2个U盘,一个做引导,一个做镜像
-——————————————————————————————–
一:制作U盘引导盘

0、格式化U盘为FAT32
1、启动bootice.EXE
2、点选第二个按钮:应该是主引导记录

制作U盘引导盘 - leaf - ------坚持雅操------

 
3、选择GRUB4DOS,然后点安装/配置

制作U盘引导盘 - leaf - ------坚持雅操------

4、写入磁盘

制作U盘引导盘 - leaf - ------坚持雅操------

 

5、复制文件到U盘即可

制作U盘引导盘 - leaf - ------坚持雅操------

 6、更新
如出了最新版,可将iso文件复制进U盘替换掉即可

二:制作镜像盘

1、U盘格式化为exfat格式
2、选择镜像文件,选择U盘,取消下面的3个勾,然后点开始即可
2、制作U盘引导盘、镜像盘 - leaf - ------坚持雅操------

注意:如果不能写入,可以不格式化U盘,只分配盘符。

下载地址:http://pan.baidu.com/share/link?shareid=436698&uk=336411764
按照制作过程列出
-————————–
1、制作启动盘工具

DiskGenius:用于分区、格式化
BOOTICE:制作引导盘,用来引导mac镜像
硬盘安装助手:制作镜像盘,用来将mac镜像写入U盘,使U盘成为安装盘
Mac Drive:windows下读写HFS分区,用于修改镜像盘。
HFSExploer:也是windows下读写HFS分区,用于修改镜像盘。

2、修改镜像

NullCPUPowerManagement.kext  关闭ACPI电源管理的驱动
AppleACPIPS2Nub.kext                用于支持PS2的鼠标键盘
ApplePS2Controller.kext               用于支持PS2的鼠标键盘
FakeSMC.kext(2.5版)
-——
myfix:用于修复文件权限
-————–
安装过程要增删kext,在win下操作的话win下的读写工具就用上了。

3、第一次进系统

Chameleon_2.2svn_r2187_trunk.pkg 变色龙引导工具,使硬盘自己引导启动
把/E/E下的kext拷到/S/L/E下

4、安装驱动工具

一般工具

MultiBeast :一些工具和驱动集合
System Info.app 检查系统驱动了那些硬件,加载了那些kext
ShowAllFiles.app:查看隐藏文件
Chameleon Wizard :创建org.apple.Boot.plist、SMBIOS等

Kext工具

Kext Wizard :安装kext驱动工具
ATI Tools :导出端口参数的工具
HexEdit :修改端口参数的工具
PlistEditPro:修改plist文件的工具

DSDT相关工具

aida64extreme:导出主板和gpu的SMBIOS工具
IORegistryExplorer:查看系统加载的kext工具
DSDTFixer.app :修复原始aml文件

DSDT_Editor:编辑、修复、导出DSDT.AML工具
iDSDT:添加显卡、声卡信息到aml文件。(亦可手动添加)

5、查看日志

bdmesg:查看变色龙的运行日志
Chameleon Wizard:也内置了bdmesg,也可以很方便的查看
dmesg:查看mac启动记录
控制台:点kernel.log

KEXT说明
-——————

FakeSMC.kext:                              黑苹果必要kext,模拟苹果设备
NullCPUPowerManagement.kext     禁用电源管理的kext
AppleACPIPS2Nub.kext                   PS2键盘鼠标驱动
ApplePS2Controller.kext                   PS2键盘鼠标驱动
-—————————
AppleIntelPIIXATA.kext   Intel免AHCI专用kext
AppleATIATA.kext     AMD芯片组专用kext(2009.12.30)
AppleATIPATA.kext      AMD芯片组专用kext
AppleNForceATA.kext    NForce芯片组专用kext
AppleVIAATA.kext     VIA芯片组专用kext
JMicronATA.kext       JMicron芯片组专用kext
AppleVIAATA.kext.for.sis  SIS芯片组专用kext
-————————–
ElliottForceLegacyRTC.kext或者LegacyAppleRTC.kext   防止主板BIOS的CMOS重置(2选1,不可共用)
OpenHaltRestart.kext或者EvOreboot.kext              解决重启/关机时遇到无法断电问题(2选1,不可共用)
PlatformUUID.kext     解决Unable to determine UUID for host. Error : 35的问题
AppleACPIPlatform.kext         据说能解决:DSMOS has arrived错误
待续。。。。

推荐网站

http://www.osx86.net/