momo zone

调核人的blog

Monthly Archives: 三月 2012

ps3 开发相关资料

备忘

http://www.ps3devwiki.com/wiki/Main_Page

http://git.gitbrew.org/openclit

ftp://ftp.infradead.org/pub/Sony-PS3/distro-kit/

Advertisements

ps2 linux loader

一个开源项目 ,用非官方的bootload 去加载2.0 – 2.6 的内核 !

http://kernelloader.sourceforge.net/linux.html

google android source 又可以访问了

http://source.android.com

之前提示不对您所在的国家开放,现在又可以了。而且repo下载地址变更了。

curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo

定制centos(rhel)

1. 在VM上安装一个最少化的Linux系统之后,再根据实际情况安装需要的软件包:

# yum install -y pump-devel gtk2-devel booty bogl-devel bogl-bterm elfutils-devel beecrypt-devel dietlibc anaconda anaconda-runtime busybox-anaconda

2. 下载一个CentOS 5.2的DVD iso.

# mount -o loop /storage/CentOS-5.2-i386-bin-DVD.iso /media

3. 建立相关的目录环境

# mkdir -p /storage/kickstart_build/isolinux/CentOS
# mkdir -p /storage/kickstart_build/isolinux/ks
# mkdir -p /storage/kickstart_build/isolinux/image
# mkdir -p /storage/kickstart_build/isolinux/repodata
# mkdir /storage/kickstart_build/all_rpms

4. 复制源CD中的文件:

# cp -rp /media/isolinux/* /storage/kickstart_build/isolinux

包括.discinfo

# cp /media/.discinfo /storage/kickstart_build/isolinux
# cp -rp /media/isolinux/repodata/comps.xml /storage/kickstart_build
# cp -rp /media/CenOS/* /storage/kickstart_build/all_rpms

5.编辑ks.cfg:

#vi /storage/kickstart_build/isolinux/ks/ks.cfg
# Kickstart file automatically generated by anaconda.

install
cdrom
lang en_US.UTF-8
keyboard us
network --device eth0 --bootproto dhcp
network --device eth1 --onboot no --bootproto dhcp
rootpw --iscrypted $1$AEQtgISA$pJKkCI5GeO3MLmLz/Fz.00
firewall --enabled --port=22:tcp
authconfig --enableshadow --enablemd5
selinux --disabled
timezone --utc Asia/Shanghai
bootloader --location=mbr --driveorder=sda
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
#clearpart --linux --drives=sda
#part /boot --fstype ext3 --size=100 --ondisk=sda
#part pv.2 --size=0 --grow --ondisk=sda
#volgroup VolGroup00 --pesize=32768 pv.2
#logvol / --fstype ext3 --name=LogVol00 --vgname=VolGroup00 --size=1024 --grow
#logvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=256 --grow --maxsize=512
clearpart --all --initlabel
part /boot --fstype ext3 --size=100
part swap --size=1024
part / --fstype ext3 --size=100 --grow

%packages
@editors
@text-internet
@dialup
@core
@base
device-mapper-multipath

6. 对RPMS进行剪裁
例如你可以将你需要安装的RPM包全部复制到/storage/kickstart_build/isolinux/CentOS目录下,请参考附件list文件,是我需要安装的软件包列表. 你可以编辑comps.xml 文件中的packages列表来决定你需要安装的软件包.

7.收集依赖性软件包
请使用shell1,使用方法: 下载到/storage/kickstart_build目录下,修改为pare.pl,并赋予可执行权限:

# cd /storage/kickstart_build
# chmod +x pare.pl
# cd /storage/kickstart_build/isolinux/CentOS
# /storage/kickstart_build/pare.pl /storage/kickstart_build/all_rpms i386

8.测试软件包的依赖性

# cd /storage/kickstart_build/isolinux/CentOS
# mkdir /tmp/testdb
# rpm --initdb --dbpath /tmp/testdb
# rpm --test --dbpath /tmp/testdb -Uvh *.rpm

按照提示,缺少哪些依赖性软件包,直接从/storage/kickstart_build/all_rpms 下复制过来就行了.

9.创建repository

# cd /storage/kickstart_build/isolinux
# declare -x discinfo=`head -1 .discinfo`
# createrepo -u "media://$discinfo" -g /storage/kickstart_build/comps.xml .

命令运行完毕之后,会自动建立repodata目录.

10.建立ISO文件

# cd /storage/kickstart_build
# mkisofs -o MYOS.iso -b isolinux.bin -c boot.cat -no-emul-boot \
   -boot-load-size 4 -boot-info-table -R -J -v -T isolinux/

生成MD5字符串:

# /usr/lib/anaconda-runtime/implantisomd5 custom.iso

另一篇 :

1、 在虚拟机中安装系统,选择所需的设置和软件包

2、 安装定制光盘所需软件

1 yum –y install createrepo mkisofs

3、 生成安装系统所需的rpm文件列表

1 awk '/Installing/{print $2}' install.log |sed 's/^[0-9]*://g'>/root/packages.list

4、 创建定制工作目录

1 mkdir /home/OS
2 mount /dev/cdrom /mnt
3 rsync –a --exclude=CentOS /mnt/ /home/OS
4 mkdir /home/OS/CentOS

5、 复制系统安装所需rpm包
复制脚本cprpm.sh

01 #!/bin/bash
02 DEBUG=0
03 DVD_CD=/home/OS/CentOS  //目标地址,即要复制到的地方
04 ALL_RPMS_DIR=/mnt/CentOS/   //源目录,以CentOS 5.6为例
05 DVD_RPMS_DIR=$DVD_CD
06 packages_list=/root/packages.list
07 number_of_packages=`cat $packages_list | wc -l`
08 i=1
09 while $i -le $number_of_packages ] ; do
10 line=`head -n $i $packages_list | tail -n -1`
11 name=`echo $line | awk '{print $1}'`
12 version=`echo $line | awk '{print $3}' | cut -f 2 -d :`
13 if $DEBUG -eq "1" ] ; then
14 echo $i$line
15 echo $name
16 echo $version
17 fi
18 if $DEBUG -eq "1" ] ; then
19 ls $ALL_RPMS_DIR/$name-$version*
20 if [ $? -ne 0 ] ; then
21 echo "cp $ALL_RPMS_DIR/$name$version* "
22 fi
23 else
24 echo "cp $ALL_RPMS_DIR/$name-$version* $DVD_RPMS_DIR/"
25 cp $ALL_RPMS_DIR/$name$version$DVD_RPMS_DIR/
26 # in case the copy failed
27 if [ $? -ne 0 ] ; then
28 echo "cp $ALL_RPMS_DIR/$name$version* "
29 cp $ALL_RPMS_DIR/$name$DVD_RPMS_DIR/
30 fi
31 fi
32 i=`expr $i + 1`
33 done

运行脚本复制文件到/home/OS/CentOS下

1 chmod +x cprpm.sh
2 ./cprpm.sh

复制gcc和gcc-c++所需的7个rpm包

1 gcc:
2 kernel-headers
3 glibc-headers
4 glibc-devel
5 cpp
6 gcc
7 gcc-c++:
8 libstdc++-devel
9 gcc-c++

6、 定制kickstart文件ks.cfg
文件从/root/anaconda-ks.cfg中复制修改,修改如下
① 安装gcc和gcc-c++
② 移除sendmail, firstboot-tui, bluez-utils
③ 关闭不使用的服务
/home/OS/ks.cfg内容如下:

01 # Kickstart file automatically generated by anaconda.
02 install
03 cdrom
04 lang en_US.UTF-8
05 keyboard us
06 network --bootproto=dhcp --device=eth0 --onboot=on
07 #network --device eth0 --bootproto dhcp
08 rootpw --iscrypted $1$h8PndJA7$f9cxY4cHR0lSnwaq.5Y0o.
09 #firewall --enabled --port=22:tcp
10 authconfig --enableshadow --enablemd5
11 firewall --disabled
12 selinux --disabled
13 timezone Asia/Shanghai
14 bootloader --location=mbr --driveorder=sda
15 # The following is the partition information you requested
16 # Note that any partitions you deleted are not expressed
17 # here so unless you clear all partitions first, this is
18 #boot 100M 交换分区4096M 其余的全部给 /分区 (见下面的分区配置)
19 part /boot --bytes-per-inode=4096 --fstype="ext3" --size=100
20 part swap --bytes-per-inode=4096 --fstype="swap" --size=4096
21 part / --bytes-per-inode=4096 --fstype="ext3" --grow --size=1
22
23 %packages
24 @base
25 @core
26 gcc
27 gcc-c++
28 keyutils
29 iscsi-initiator-utils
30 trousers
31 fipscheck
32 device-mapper-multipath
33 -sendmail
34 -firstboot-tui
35 -bluez-utils
36
37 %post
38 # Disable unused service
39 chkconfig acpid off
40 chkconfig anacron off
41 chkconfig ip6tables off
42 chkconfig lvm2-monitor off
43 chkconfig netfs off
44 chkconfig nfslock off
45 chkconfig pcscd off
46 chkconfig portmap off
47 chkconfig restorecond off
48 chkconfig rpcgssd off
49 chkconfig rpcidmapd off

7、 修改/home/OS/isolinux/isolinux.cfg
把第一行的default linux改成default text ks=cdrom:/ks.cfg

8、 生成comps.xml

1 cd /home/OS
2 declare -x discinfo=`head -1 .discinfo`
3 createrepo –g repodata/comps.xml .
4 或者createrepo –g repodata/comps.xml /home/OS/

9、 生成ISO文件

1 cd /home/OS
2 mkisofs -o CentOS-5.6-i386-CD.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -J -v -T /home/OS
3 /home/OS/CentOS-5.6-1386-CD.iso

 

最简单的kernel srpm spec

备忘一下

Name: kernel
Summary: The Linux Kernel
Version: 2.6.34
Release: 3
License: GPL
Group: System Environment/Kernel
Vendor: The Linux Community
URL: http://www.kernel.org
Source: kernel-2.6.34.tar.gz
BuildRoot: /var/tmp/%{name}-%{PACKAGE_VERSION}-root
Provides: kernel-2.6.34
%define __spec_install_post /usr/lib/rpm/brp-compress || :
%define debug_package %{nil}

%description
The Linux Kernel, the operating system core itself

%prep
%setup -q

%build
make clean && make %{?_smp_mflags}

%install
%ifarch ia64
mkdir -p $RPM_BUILD_ROOT/boot/efi $RPM_BUILD_ROOT/lib/modules
mkdir -p $RPM_BUILD_ROOT/lib/firmware
%else
mkdir -p $RPM_BUILD_ROOT/boot $RPM_BUILD_ROOT/lib/modules
mkdir -p $RPM_BUILD_ROOT/lib/firmware
%endif
INSTALL_MOD_PATH=$RPM_BUILD_ROOT make %{_smp_mflags} KBUILD_SRC= modules_install
%ifarch ia64
cp $KBUILD_IMAGE $RPM_BUILD_ROOT/boot/efi/vmlinuz-2.6.34
ln -s efi/vmlinuz-2.6.34 $RPM_BUILD_ROOT/boot/
%else
%ifarch ppc64
cp vmlinux arch/powerpc/boot
cp arch/powerpc/boot/$KBUILD_IMAGE $RPM_BUILD_ROOT/boot/vmlinuz-2.6.34
%else
cp arch/x86_64/boot/bzImage $RPM_BUILD_ROOT/boot/vmlinuz-2.6.34
%endif
%endif
cp System.map $RPM_BUILD_ROOT/boot/System.map-2.6.34
cp .config $RPM_BUILD_ROOT/boot/config-2.6.34
%ifnarch ppc64
cp vmlinux vmlinux.orig
bzip2 -9 vmlinux
mv vmlinux.bz2 $RPM_BUILD_ROOT/boot/vmlinux-2.6.34.bz2
mv vmlinux.orig vmlinux
%endif

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr (-, root, root)
%dir /lib/modules
/lib/modules/2.6.34
/lib/firmware
/boot/*

grub 气死人啊

想把grub搞到U盘上,之前都是在opensuse里 grub -> root (hd1,0) -> setup (hd1)  就ok , 换了centos 就不行了,出现的情况要不是黑屏,gurb发疯,要不就是提示grub stage1 error 等等。

最后发现各个发行版里的grub都不一样 , 有的grub menu要从/boot/grub/menu.conf中读取(opensuse),有的要从/boot/grub/grub.conf中读取(redhat),而且menu.conf 要链接到grub.conf 。

管道操作中的terminated by signal 13

类似这样bash语句:

find ${KERNEL} -exec basename {} \; |grep -q ^vmlinuz-[0-9].[0-9].[0-9]*-*

如果find的结果多于一个,则会报错terminated by signal 13 , signal 13 :SIGPIPE

原因出在grep -q ,如果静默输出则和grep -m N 的情况一样 :

-q :一旦找到一个符合正则的 就关闭管道,后面还有符合的就会报错

-m:一旦找到N个符合正则的 就关闭管道,后面还有符合的就会报错

git reset 回退

git reset是指将当前head的内容重置,不会留log信息。

git reset HEAD filename 从暂存区中移除文件

git reset –hard HEAD~3 会将最新的3次提交全部重置,就像没有提交过一样。

git reset –hard 38679ed709fd0a3767b79b93d0fba5bb8dd235f8

回退到 38679ed709fd0a3767b79b93d0fba5bb8dd235f8 版本

根据–soft –mixed –hard,会对working tree和index和HEAD进行重置:

git reset –mixed:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和index信息

git reset –soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可

git reset –hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容

如果在git reset –hard 回滚后,有些目录或文件会自动移出git版本库,因为过去这些文件或目录在版本库不存在嘛。这样如果再执行git pull 会提示

error: Untracked working tree file ‘XXXXXXXXXXXXXX’ would be overwritten by merge. Aborting

这时需要执行一下git clean -f -d 就ok 了

X61T ,wacom,tracepoint, rotation,smapi,fan-control, hdaps …

  • wacom 属性设置:

X61t 的wacom 实际是个串口设备,Xorg 读取/dev/ttyS4 为输入流。

/etc/X11/xorg.conf.d/50-wacom.conf

Section “InputClass”
Identifier “Wacom serial class”
MatchProduct “Serial Wacom Tablet”
Driver “wacom”
Option “Threshold” “800”
Option “Suppress” “2”
# Option “Suppress” “200”
Option “Capacity” “-1”
EndSection

/etc/X11/xorg.conf.d/99-wacom-calibration.conf

Section “InputClass”
Identifier “calibration”
MatchProduct “Serial Wacom Tablet”
Option “TopX” “80”
Option “TopY” “57”
Option “BottomX” “24650”
Option “BottomY” “18419”
EndSection

update:

https://projects.kde.org/projects/extragear/base/wacomtablet/repository 可整合到kde4的wacom 设置程序,不依赖xorg 的驱动工作,只要kernel ok就行,比官方的还要好用。

  • X rotation屏幕翻转:

/usr/bin/xrotate.sh:

 #!/bin/sh

 output=LVDS1
 if [ "$XROT_OUTPUT" ]
 then
         output=$XROT_OUTPUT;
 fi
 OLDIFS="${IFS}"
 IFS=','
 devices="Serial Wacom Tablet stylus,Serial Wacom Tablet eraser"

 geomnbr=0
 xrandr=normal
 wacom=normal
 if [ "$1" == "-" ] || [ "$1" == "+" ] || ! [ "$1" ];
 then
         operator="$1";
         [ "$1" ] || operator='+';
         case `xrandr --verbose | grep "^$output " | sed "s/^[^ ]* [^ ]* [^ ]* ([^(]*) \([a-z]*\).*/\1/"` in
                 normal)         geom=0;;
                 left)           geom=1;;
                 inverted)       geom=2;;
                 right)          geom=3;;
         esac
         let geom=${geom}${operator}1+4
         let geom=${geom}%4
 else
         geom="$1"
 fi

 case $geom in
         1)      wacom=2; xrandr=left ;;
         2)      wacom=3; xrandr=inverted ;;
         3)      wacom=1; xrandr=right ;;
         *)      wacom=0; xrandr=normal ;;
 esac

 echo "xrandr to $xrandr, xsetwacom to $wacom" >&2

 if xrandr --output "$output" --rotate "$xrandr"; then
        for d in $devices
        do
                 xsetwacom set "$d" Rotate "$wacom"
         done

 fi
 IFS="${OLDIFS}"
 #workaround for linuxwacom bug
 if [ "`xsetwacom get stylus Mode`" == '1' ]; then
         for d in $devices
         do
                 xsetwacom set stylus CoreEvent "off"
                 xsetwacom set stylus Mode "off"
         done
         { sleep 1;
         for d in $devices
         do
                 xsetwacom set stylus Mode "on"
                 xsetwacom set stylus CoreEvent "on"
         done; } &
 fi

  •  tracepoint
/lib/udev/rules.d/66-xorg-trackpoint.rules

#设置加速

SUBSYSTEM==”serio”, DRIVERS==”psmouse”,WAIT_FOR=”/sys/devices/platform/i8042/serio1/sensitivity”, ATTR{sensitivity}=”210″

#设置红点点击

SUBSYSTEM==”serio”, DRIVERS==”psmouse”,WAIT_FOR=”/sys/devices/platform/i8042/serio1/press_to_select”,ATTR{press_to_select}=”1″


  • 电池管理:

/etc/modules-load.d/thinpad_x61t.conf

thinkpad_ec
tp_smapi
hdaps

参考http://www.thinkwiki.org/wiki/Tp_smapi

设置充电阈值(udev调用)

/lib/udev/rules.d/98-thinpad_smapi.rules

ACTION==”remove” ,GOTO=”thinkpad_smapi_end”
SUBSYSTEM==”module”, KERNEL==”tp_smapi”, RUN+=”/lib/udev/thinkpad_smapi.sh”
LABEL=”thinkpad_smapi_end”

/lib/udev/thinkpad_smapi.sh

#!/bin/sh
START_THRESH=’/sys/devices/platform/smapi/BAT0/start_charge_thresh’
STOP_THRESH=’/sys/devices/platform/smapi/BAT0/stop_charge_thresh’

if [[ -e “${START_THRESH}” ]]
then
echo 40 > ${START_THRESH}
fi

if [[ -e “${STOP_THRESH}” ]]
then
echo 60 > ${STOP_THRESH}
fi

  • 风扇转速管理:

To enable fan control, the module parameter fan_control=1 must be given to thinkpad-acpi

vi /etc/modprobe.d/50-thinkpad_acpi.conf

options thinkpad_acpi experimental=1 fan_control=1 hotkey=0xffffff

# echo level 0 > /proc/acpi/ibm/fan (fan off)

# echo level 2 > /proc/acpi/ibm/fan (low speed)

# echo level 4 > /proc/acpi/ibm/fan (medium speed)

# echo level 7 > /proc/acpi/ibm/fan (maximum speed)

# echo level auto > /proc/acpi/ibm/fan (automatic – default)

# echo level disengaged > /proc/acpi/ibm/fan (disengaged)

  • fixed! 加底座后无声音 :

vi /etc/modprobe.d/50-sound.conf

append:

options snd-hda-intel model=thinkpad

这样还不彻底,kde声音正常,但speaker-test 没有声音,怀疑是pulse-audio 捣鬼,于是把pulse-audio降级成alsa的一个channel:

vi /etc/pulse/default.pa:

#load-module module-alsa-sink

改成

load-module module-alsa-sink device=dmix

并注释掉这一行:

#load-module module-suspend-on-idle

  • 睡眠自动关闭dock

vi /usr/lib/pm-utils/sleep.d/98docking

#!/bin/bash
. “${PM_FUNCTIONS}”
case “$1” in
        hibernate|suspend)
                        echo 1 > /sys/devices/platform/dock.0/undock
                        echo 9 > /proc/acpi/ibm/beep
                ;;
        thaw|resume)
                ;;
        *) exit $NA
                ;;
esac
exit $?
~
  • HDAPS

确保tp_smapi已安装

下载用户态的hdapsd程序,http://sourceforge.net/project/showfiles.php?group_id=138242&package_id=308030
编译安装
执行/usr/bin/hdapsd -d sdX -s 15 -b 启动守护进程
KDE下的applet可以编译安装hdaps_monitor-0.3
  • laptop mode

如果不装这玩意儿,电池会消耗很快,就算用AC发热也很大。

安装laptop-mode-tools
全局设置文件是/etc/laptop-mode/laptop-mode.conf
其中要修改
ENABLE_LAPTOP_MODE_ON_AC=1
ENABLE_LAPTOP_MODE_WHEN_LID_CLOSED=1
在/etc/laptop-mode/conf.d 可以设置各个模块的休眠设置
其中要修改的主要是usb-autosuspend.conf将Trigger字段改为如下内容:
BATT_SUSPEND_USB=1
LM_AC_SUSPEND_USB=1
另外一个要修改的是ethernet.conf,取消ethernet.conf模块的功能:
CONTROL_ETHERNET=0
原因是好像这个模块有bug,切换到BATT模式下网卡会罢工。
全部设置完之后可以用powertop确认一下。
  • 终端模式下LID休眠

新增/etc/acpi/events/lid,内容如下:

event=button/lid
action=/usr/lib/acpid/lid %e
新增/usr/lib/acpid/lid ,内容如下:
#!/bin/sh
/usr/sbin/pm-suspend
由于KDE有自己的LID触发机制,所以要把KDE的LID动作关闭。

Linux-libre for 100% free