にほんブログ村 IT技術ブログへ
にほんブログ村

Linux ブログランキングへ

2017年03月08日

OpenSuse改造日記 キーボード付きBay-Tailタブレット ASUS Transbook #T100TA #OpenSuse 42.2 grub2 i386 UEFI32bit ビルド設定Kernel4.10インストールテスト編 その4

opensuse.jpg

OpenSuse42.2をT100TAに入れた記録をします。
結構苦労しましたのでメモしないと。
OpenSuseエンジニアの反応が薄いのが玉にキズですw
ドキュメントがないので自分でテストして作ります。

●OpenSuse42.2とWindowsタブレット
OpenSuseはメジャーなLinuxディストリで
スタンダードな作りなので本来気にする必要がないのですが、
タブレットのドキュメントがあまりになさ過ぎて
苦労すると思います。
なのでインストールの記録を残します。

基本的には前回のWIN-70Bに入れた時の内容と殆ど同じですが、
いくつかやり方を見直した所があります。
余計面倒になりましたが、Kernelとブートローダーの
情報をアップデートしております。
これを元に他のタブレットでも動かしてみてください。

変化点として
・OpenSuse42.2に変更
・ブート時のgrub.cfgの設定で
 linux (hd1,gpt6)/@/boot/vmlinuz 〜
 と言った感じで.snapshotsと隠しファイルにしなくても良くなった。
・kernel4.4なので動くデバイスが増えた
 ただし、それでも十分古いので初期のBay-Trail以外
 Kernelバグの影響で動かすのが厳しい
・Kernel4.10に入れ直した。
 その際にroot=/dev/mmcblk0p6の指定で認識せず
 rootフォルダが認識しなくなった。起動しない。
 update-grubを用いてUUID指定したら起動した。超面倒
・Intel Graphics Driverが自動認識。
 これはKernelを4.10に上げたUbuntuと同じです。
 Blackscreenの問題が解決するので安定起動できます。
 本来の高解像度になります。
・grub2-efi-i386は相変わらずソースコードからビルド
 面倒。
・ローリング・リリースのTumbleweed版はLive版、リリース版ともに
 現時点ではフリーズして落ちて起動しない。使えない。
・今回はWindows10とデュアルブート。
 パーティションの設定方法を微妙に変えています。要注意。
 (hd0,gpt2)⇒(hd1,gpt6)

僕の方は結構レベルUPしましたが、OpenSuseは相変わらず。
UEFI32bitにおいて面倒極まりないディストリです。
英語の資料を発信して全世界のOpenSuse使いに文句を言いたいw
マジで。
このままだと辛くてたまらん。

●基本的なインストール方法 過去ブログ参照
インストールは基本的には全く同じです。

 
OpenSuse改造日記 Windows10用Bai-Trail世代中華タブレット Win-70B OpenSuse42.1インストールテスト編 その1

 OpenSuse改造日記 Windows10用Bai-Trail世代中華タブレット Win-70B OpenSuse42.1 grub2 i386 UEFI32bit ビルド設定テスト編 その2

●OpenSuse42.2インストール。
まずUSBメモリに焼いたOpenSuseに
bootia32.efiをダウンロードして、
USBメモリのOpenSuseのEFI/BOOT/にコピーして保存します。

セキュアブートをOFFにしてUSBから起動します。
CUIのgrub画面になったら

 grub> linux (hd0,msdos1)/boot/x86_64/loader/linux root=/dev/mmcblk0p2 nomodeset intel_idle.max_cstate=1 reboot=pci (改行)
 grub> initrd (hd0,msdos1)/boot/x86_64/loader/initrd (改行)
 grub> boot (改行)

これで初回は起動します。
今回はWindows10とデュアルブートします。
容量を自動設定で18GBほど確保しました。

 MMC/SDカード1(mmcblk0)のパーティション6をbtrfに

設定されました。
単独インストールだとパーティション2か3
デュアルブートだとパーティション5か6
で今回は6。ちゃんと覚えておきましょう。
起動する際に忘れていたらbtrfのパーティションを探します。

初期ではWifiは使えませんので有線LANカードを必ず刺しましょう。
自動アップデートが有効になるので限りなく楽です。
42.1の時はインストールエラーが出ましたが
今回42.2の時は出ませんでした。

再起動してまたUSBから起動します。
CUIのgrub画面になったら

 grub> linux (hd1,gpt6)/@/boot/vmlinuz-4.4.49-16-default root=/dev/mmcblk0p6 nomodeset intel_idle.max_cstate=1 reboot=pci (改行)
 grub> initrd (hd1,gpt6)/@/boot/initrd-4.4.49-16-default(改行)
 grub> boot (改行)

ここらへんの設定は構成によって毎回変わりますw
怖いです。
TABキーで予測検出できるので最大限に使いましょう。
でないとわかりません。
gpt6は今回のデュアルブート時の自動設定です。
もちろん、root=/dev/mmcblk0p6の6もgpt6のパーティションから来ています。
マジで凄く分からないので要注意。

ここで神に祈ったら再起動します。
起動しなかったら設定が間違っているか
Kernelバグでフリーズしているかどちらかですw
また、一番あるのがroot=/dev/mmcblk0p6の記載間違え。
TABキーで予測入力できないので一番悩み苦しみますw
マジで。

起動して有線LANからネットに繋いだら、
まずgrub2をソースコードからビルド。
前回と同じです。

まずビルド用のパッケージを入れます。
端末から

 zypper install autogen automake autoconf bison gcc flex make git git-cvs nano

でgrub2をダウンロードしてビルドします。

 sudo su
 git clone git://git.savannah.gnu.org/grub.git
 cd grub
 ./autogen.sh
 ./configure --with-platform=efi --target=i386 --program-prefix=""
 make
 make install
 cd grub-core
 ../grub-install -d . --efi-directory /boot/efi --target=i386
 ../grub-mkimage -d . -o bootia32.efi -O i386-efi -p /boot/grub ntfs hfs appleldr boot cat efi_gop efi_uga elf fat hfsplus iso9660 linux keylayouts memdisk minicmd part_apple ext2 extcmd xfs xnu part_bsd part_gpt search search_fs_file chain btrfs loadbios loadenv lvm minix minix2 reiserfs memrw mmap msdospart scsi loopback normal configfile gzio all_video efi_gop efi_uga gfxterm gettext echo boot chain eval
 sudo cp bootia32.efi /boot/efi/EFI/opensuse/


コピペですがOKのはず。
まだgrub.cfg書き換え前です。要注意。

●Kernel4.10インストール
次はgrub.cfgですが今回はKerrnel4.10を先に入れます。
参考はこちらから。

Install Linux Kernel 4.10 in openSUSE

端末から

sudo nano /etc/zypp/zypp.conf

下記の行にoldestを追加。

multiversion = provides:multiversion(kernel)
[...]
multiversion.kernels = latest,latest-1,running,oldest
[...]

保存したら終了してレポジトリを登録

sudo zypper addrepo -f http://download.opensuse.org/repositories/Kernel:/HEAD/standard/ kernel-repo

これで成功したら、こんな文章が出るはずです。

Adding repository 'kernel-repo' ..........................................[done]
Repository 'kernel-repo' successfully added
Enabled : Yes
Autorefresh : Yes
GPG Check : Yes
URI : http://download.opensuse.org/repositories/Kernel:/HEAD/standard/

確認したらアップグレード。

sudo zypper dist-upgrade -r kernel-repo

インストール完了です。
このままではブートローダーで起動しません。

●Kernel4.10のブートローダー設定
ここからは実はヤケですw
実際分からんもんw
実はkernel4.10になるとroot=/dev/mmcblk0p6で起動しません。
いやKernel4.4だと起動するんですけど(汗
grub.cfgの自動設定してみました。

まず/etc/default/grubの設定を追加

sudo nano /etc/default/grub

下記1行を追加して保存。
resume=/dev/mmcblk0p6 は自分のパーティションを指定。

GRUB_CMDLINE_LINUX_DEFAULT="i915.modeset=0 intel_idle.max_cstate=1 reboot=pci resume=/dev/mmcblk0p6 splash=silent quiet showopts"

で、UbuntuやDebianでよく使うupdate-grubを使います。
ただしOpenSuseにはupdate-grubコマンドはないので自作します。
こちらを参考というかそのまま。

Thread: grub2 update-grub?

端末から、

nano update-grub

下記をコピペして保存します。

#!/bin/sh
set -e
exec grub2-mkconfig -o /boot/grub/grub.cfg "$@"

保存したら、実行形式に

sudo chmod +x update-grub
sudo cp update-grub /usr/sbin/

これでOKです。
では実行

sudo update-grub

ガシガシと自動作成されて保存されます。
ただしこのままでは起動しませんw
大々的に書き換えが必要です。
以前作成した内容を参考に。

 grub> linux (hd1,gpt6)/@/boot/vmlinuz-4.4.49-16-default intel_idle.max_cstate=1 reboot=pci (改行)
 grub> initrd (hd1,gpt6)/@/boot/vmlinuz-4.4.49-16-default(改行)
 grub> boot (改行)

を例にしてここの

 linuxefiと
 initrdefiを

linux (hd1,gpt6)/@/boot/vmlinuz-
initrd (hd1,gpt6)/@/boot/initrd-

に変更します。基本的に全部です。
エディタで置換すると便利です。
パーティションを絶対パスにしないと起動しません。
あとはrootをUUIDに設定します。
これは自動設定通りで良いはずです。
これを保存したらOKのはずです。
再起動した際にUEFI画面でgrubとあるのでそれを起動します。
実例は最後にメモを残しておきます。
再起動して無事起動できればOKです。
Kernel4.10ではIntel Graphics Driverが自動起動しますので
nomodesetやi915.modeset=0などのフレームバッファ設定は消して
OFFにしておきましょう。Blackscreenにはならないはずです。

●まとめ
T100TAでもOpenSuseでちゃんと起動、
アップデートできました。
結構強引ですがひとまずOK。
Wifiなどのドライバは別途設定。
だれかブートローダーのパッケージと設定を。
面倒です。
あとT100TAはKernel4.4でも問題なく起動する機種なので
ちゃんと起動しましたが、
Bay-Trail末期とCherry-Trailタブレットは起動しないので注意。
42.3を待つしかなさそうです。


●grub.cfg実例
ちなみに下記が僕の環境の実例です。


# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
set btrfs_relative_path="y"
export btrfs_relative_path
if [ -f ${config_directory}/grubenv ]; then
load_env -f ${config_directory}/grubenv
elif [ -s $prefix/grubenv ]; then
load_env
fi

if [ "${env_block}" ] ; then
load_env -f "${env_block}"
fi

if [ "${next_entry}" ] ; then
set default="${next_entry}"
set next_entry=
save_env next_entry
if [ "${env_block}" ] ; then
save_env -f "${env_block}" next_entry
fi
set boot_once=true
else
set default="${saved_entry}"
fi

if [ x"${feature_menuentry_id}" = xy ]; then
menuentry_id_option="--id"
else
menuentry_id_option=""
fi

export menuentry_id_option

if [ "${prev_saved_entry}" ]; then
set saved_entry="${prev_saved_entry}"
save_env saved_entry
set prev_saved_entry=
save_env prev_saved_entry
set boot_once=true
fi

function savedefault {
if [ -z "${boot_once}" ]; then
saved_entry="${chosen}"
save_env saved_entry
fi
}

function load_video {
if [ x$feature_all_video_module = xy ]; then
insmod all_video
else
insmod efi_gop
insmod efi_uga
insmod ieee1275_fb
insmod vbe
insmod vga
insmod video_bochs
insmod video_cirrus
fi
}

if [ x$feature_default_font_path = xy ] ; then
font=unicode
else
insmod part_gpt
insmod btrfs
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root b2c5a95d-8054-4025-a339-a1dd902ad3f2
else
search --no-floppy --fs-uuid --set=root b2c5a95d-8054-4025-a339-a1dd902ad3f2
fi
font="/usr/share/grub2/unicode.pf2"
fi

if loadfont $font ; then
echo "Please press t to show the boot menu on this console"
set gfxmode=auto
load_video
insmod gfxterm
set locale_dir=$prefix/locale
set lang=ja_JP
insmod gettext
fi
terminal_output gfxterm
insmod part_gpt
insmod btrfs
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root b2c5a95d-8054-4025-a339-a1dd902ad3f2
else
search --no-floppy --fs-uuid --set=root b2c5a95d-8054-4025-a339-a1dd902ad3f2
fi
insmod gfxmenu
loadfont ($root)/boot/grub2/themes/openSUSE/DejaVuSans-Bold14.pf2
loadfont ($root)/boot/grub2/themes/openSUSE/DejaVuSans10.pf2
loadfont ($root)/boot/grub2/themes/openSUSE/DejaVuSans12.pf2
loadfont ($root)/boot/grub2/themes/openSUSE/ascii.pf2
insmod png
set theme=($root)/boot/grub2/themes/openSUSE/theme.txt
export theme
if [ x${boot_once} = xtrue ]; then
set timeout=0
elif [ x$feature_timeout_style = xy ] ; then
set timeout_style=menu
set timeout=8
# Fallback normal timeout code in case the timeout_style feature is
# unavailable.
else
set timeout=8
fi
if [ -n "$extra_cmdline" ]; then
submenu "Bootable snapshot #$snapshot_num" {
menuentry "If OK, run 'snapper rollback' and reboot." { true; }
}
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/00_tuned ###
set tuned_params=""
### END /etc/grub.d/00_tuned ###

### BEGIN /etc/grub.d/10_linux ###
menuentry 'openSUSE Leap 42.2' --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-b2c5a95d-8054-4025-a339-a1dd902ad3f2' {
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod btrfs
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root b2c5a95d-8054-4025-a339-a1dd902ad3f2
else
search --no-floppy --fs-uuid --set=root b2c5a95d-8054-4025-a339-a1dd902ad3f2
fi
echo 'Linux 4.10.0-1.g12a7a6d-default をロード中...'
linux (hd1,gpt6)/@/boot/vmlinuz-4.10.0-1.g12a7a6d-default
root=UUID=b2c5a95d-8054-4025-a339-a1dd902ad3f2 ro ${extra_cmdline} intel_idle.max_cstate=1 reboot=pci resume=/dev/mmcblk0p5 splash=silent quiet showopts
echo '初期 RAM ディスクをロード中...'
initrd (hd1,gpt6)/@/boot/initrd-4.10.0-1.g12a7a6d-default
}
submenu 'Advanced options for openSUSE Leap 42.2' --hotkey=1 $menuentry_id_option 'gnulinux-advanced-b2c5a95d-8054-4025-a339-a1dd902ad3f2' {
menuentry 'openSUSE Leap 42.2, with Linux 4.10.0-1.g12a7a6d-default' --hotkey=2 --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.10.0-1.g12a7a6d-default-advanced-b2c5a95d-8054-4025-a339-a1dd902ad3f2' {
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod btrfs
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root b2c5a95d-8054-4025-a339-a1dd902ad3f2
else
search --no-floppy --fs-uuid --set=root b2c5a95d-8054-4025-a339-a1dd902ad3f2
fi
echo 'Linux 4.10.0-1.g12a7a6d-default をロード中...'
linux (hd1,gpt6)/@/boot/vmlinuz-4.10.0-1.g12a7a6d-default
root=UUID=b2c5a95d-8054-4025-a339-a1dd902ad3f2 ro ${extra_cmdline}
intel_idle.max_cstate=1 reboot=pci resume=/dev/mmcblk0p6 splash=silent quiet showopts
echo '初期 RAM ディスクをロード中...'
initrd (hd1,gpt6)/@/boot/initrd-4.10.0-1.g12a7a6d-default
}
menuentry 'openSUSE Leap 42.2, with Linux 4.10.0-1.g12a7a6d-default (recovery mode)' --hotkey=3 --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.10.0-1.g12a7a6d-default-recovery-b2c5a95d-8054-4025-a339-a1dd902ad3f2' {
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod btrfs
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root b2c5a95d-8054-4025-a339-a1dd902ad3f2
else
search --no-floppy --fs-uuid --set=root b2c5a95d-8054-4025-a339-a1dd902ad3f2
fi
echo 'Linux 4.10.0-1.g12a7a6d-default をロード中...'
linux (hd1,gpt6)/@/boot/vmlinuz-4.10.0-1.g12a7a6d-default
root=UUID=b2c5a95d-8054-4025-a339-a1dd902ad3f2 ro ${extra_cmdline}
echo '初期 RAM ディスクをロード中...'
initrd (hd1,gpt6)/@/boot/initrd-4.10.0-1.g12a7a6d-default
}
menuentry 'openSUSE Leap 42.2, with Linux 4.4.49-16-default' --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.49-16-default-advanced-b2c5a95d-8054-4025-a339-a1dd902ad3f2' {
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod btrfs
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root b2c5a95d-8054-4025-a339-a1dd902ad3f2
else
search --no-floppy --fs-uuid --set=root b2c5a95d-8054-4025-a339-a1dd902ad3f2
fi
echo 'Linux 4.4.49-16-default をロード中...'
linux (hd1,gpt6)/@/boot/vmlinuz-4.4.49-16-default
root=UUID=b2c5a95d-8054-4025-a339-a1dd902ad3f2 ro ${extra_cmdline} i915.modeset=0 intel_idle.max_cstate=1 reboot=pci resume=/dev/mmcblk0p5 splash=silent quiet showopts
echo '初期 RAM ディスクをロード中...'
initrd (hd1,gpt6)/@/boot/initrd-4.4.49-16-default
}
menuentry 'openSUSE Leap 42.2, with Linux 4.4.49-16-default (recovery mode)' --hotkey=1 --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.49-16-default-recovery-b2c5a95d-8054-4025-a339-a1dd902ad3f2' {
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod btrfs
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root b2c5a95d-8054-4025-a339-a1dd902ad3f2
else
search --no-floppy --fs-uuid --set=root b2c5a95d-8054-4025-a339-a1dd902ad3f2
fi
echo 'Linux 4.4.49-16-default をロード中...'
linux (hd1,gpt6)/@/boot/vmlinuz-4.4.49-16-default
root=UUID=b2c5a95d-8054-4025-a339-a1dd902ad3f2 ro ${extra_cmdline}
echo '初期 RAM ディスクをロード中...'
initrd (hd1,gpt6)/@/boot/initrd-4.4.49-16-default
}
}

### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/20_linux_xen ###

### END /etc/grub.d/20_linux_xen ###

### BEGIN /etc/grub.d/20_memtest86+ ###
### END /etc/grub.d/20_memtest86+ ###

### BEGIN /etc/grub.d/30_os-prober ###
menuentry 'Windows Boot Manager (on /dev/mmcblk0p1)' --class windows --class os $menuentry_id_option 'osprober-efi-1A27-B3CF' {
insmod part_gpt
insmod fat
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root 1A27-B3CF
else
search --no-floppy --fs-uuid --set=root 1A27-B3CF
fi
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###

### BEGIN /etc/grub.d/41_custom ###
if [ -f ${config_directory}/custom.cfg ]; then
source ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f $prefix/custom.cfg ]; then
source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###

### BEGIN /etc/grub.d/80_suse_btrfs_snapshot ###
if [ -f "/.snapshots/grub-snapshot.cfg" ]; then
source "/.snapshots/grub-snapshot.cfg"
fi
### END /etc/grub.d/80_suse_btrfs_snapshot ###

### BEGIN /etc/grub.d/90_persistent ###
### END /etc/grub.d/90_persistent ###

### BEGIN /etc/grub.d/95_textmode ###

# On EFI systems we can only have graphics *or* serial, so allow the user
# to switch between the two
hiddenentry 'Text mode' --hotkey 't' {
set textmode=true
terminal_output console
}
### END /etc/grub.d/95_textmode ###




posted by kapper at 21:07 | Comment(0) | OpenSuse
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

にほんブログ村 IT技術ブログへ
にほんブログ村

Linux ブログランキングへ