Skip to content

Releases: kitakar5525/chromeos-kernel-linux-surface

4.19.152 and 5.4.72

18 Oct 15:16
Compare
Choose a tag to compare

4.19.152 and 5.4.72

Note

I may test only v5.4-general-surface build on Surface 3. If something is not working on your Surface devices, feel free to open issues.
I stopped releasing -minimal-surface kernel from this release.

  • general-surface: using config-general-surface. Use this one If you want a more general kernel (closer to normal Linux distros, with support of Surface devices). Probably work also on non-surface devices.
  • minimal-surface: using config-minimal-surface. Use this one if you want a minimal kernel (closer to chromiumos' original kernels, with support of Surface devices). Chances are low to work on non-surface devices.
  • k5: abbreviation of kitakar5525. Means additional patches are applied.

Difference between v4.19 and v5.4

  • All the features that work/not-work with linux+linux-surface kernel should work/not-work also with this release.
  • It's reported that v4.19 kernels don't boot on SP7/SL3. Use v5.4 kernels.

IPTS Touchscreen on v5.4

Info: chromeos-v4.19.151-10433-g001cdf76f178+surface+k5

major issues

Currently, no major issues.

Info: chromeos-v5.4.71-9749-g1031530d5b19+surface+k5-3

major issues

  • chromeos-5.4: tpm_tis causes kernel oops #20: I recommend adding module_blacklist=tpm_tis to bootloader.
  • wifi/bt unstable when using with iwl7000 #17: For now, using CONFIG_IWLWIFI instead of chromiumos' default CONFIG_IWL7000.
  • iptsd is not fully working (not responding to touches on browser, but seems to be fully working on ARC).

build command used

# git clone https://github.com/kitakar5525/linux-surface-kernel kitakar5525_linux-surface-kernel # for the first time
cd kitakar5525_linux-surface-kernel

# git clone https://github.com/kitakar5525/chromeos-kernel-linux-surface kitakar5525_chromeos-kernel-linux-surface # for the first time
cd kitakar5525_chromeos-kernel-linux-surface
git pull
cd ..

git pull --tags

########## v4.19 ##########
TAG_KERNEL="chromeos-v4.19.151-10433-g001cdf76f178+surface+k5"
git checkout $TAG_KERNEL

# mkdir ../$TAG_KERNEL-config-minimal-log # logs will be placed into this dir
# # minimal-surface
# bash kitakar5525_chromeos-kernel-linux-surface/scripts/0001-generate-kernel-config/generate-config-minimal-surface-v419.sh \
#     2>&1 | tee ../$TAG_KERNEL-config-minimal-log/0001-merge_config-log.txt
# bash kitakar5525_chromeos-kernel-linux-surface/scripts/0002-build-kernel-using-make.sh \
#     2>&1 | tee ../$TAG_KERNEL-config-minimal-log/0002-build-log.txt
# fakeroot -- bash kitakar5525_chromeos-kernel-linux-surface/scripts/0003-package-kernel.sh \
#     2>&1 | tee ../$TAG_KERNEL-config-minimal-log/0003-packaging-log.txt

mkdir ../$TAG_KERNEL-config-general-log # logs will be placed into this dir
# general-surface
bash kitakar5525_chromeos-kernel-linux-surface/scripts/0001-generate-kernel-config/generate-config-general-surface-v419.sh \
    2>&1 | tee ../$TAG_KERNEL-config-general-log/0001-config-general-merge_config-log.txt
bash kitakar5525_chromeos-kernel-linux-surface/scripts/0002-build-kernel-using-make.sh \
    2>&1 | tee ../$TAG_KERNEL-config-general-log/0002-config-general-build-log.txt
fakeroot -- bash kitakar5525_chromeos-kernel-linux-surface/scripts/0003-package-kernel.sh \
    2>&1 | tee ../$TAG_KERNEL-config-general-log/0003-config-general-packaging-log.txt

########## v5.4 ##########
TAG_KERNEL="chromeos-v5.4.71-9749-g1031530d5b19+surface+k5-3"
git checkout $TAG_KERNEL

# mkdir ../$TAG_KERNEL-config-minimal-log # logs will be placed into this dir
# # minimal-surface
# bash kitakar5525_chromeos-kernel-linux-surface/scripts/0001-generate-kernel-config/generate-config-minimal-surface-v54.sh \
#     2>&1 | tee ../$TAG_KERNEL-config-minimal-log/0001-merge_config-log.txt
# bash kitakar5525_chromeos-kernel-linux-surface/scripts/0002-build-kernel-using-make.sh \
#     2>&1 | tee ../$TAG_KERNEL-config-minimal-log/0002-build-log.txt
# fakeroot -- bash kitakar5525_chromeos-kernel-linux-surface/scripts/0003-package-kernel.sh \
#     2>&1 | tee ../$TAG_KERNEL-config-minimal-log/0003-packaging-log.txt

mkdir ../$TAG_KERNEL-config-general-log # logs will be placed into this dir
# general-surface
bash kitakar5525_chromeos-kernel-linux-surface/scripts/0001-generate-kernel-config/generate-config-general-surface-v54.sh \
    2>&1 | tee ../$TAG_KERNEL-config-general-log/0001-merge_config-log.txt
bash kitakar5525_chromeos-kernel-linux-surface/scripts/0002-build-kernel-using-make.sh \
    2>&1 | tee ../$TAG_KERNEL-config-general-log/0002-build-log.txt
fakeroot -- bash kitakar5525_chromeos-kernel-linux-surface/scripts/0003-package-kernel.sh \
    2>&1 | tee ../$TAG_KERNEL-config-general-log/0003-packaging-log.txt

Installation

Please read the whole instructions before you try to install until you
understand what the following commands do. I won't provide install scripts
(i.e. I won't provide a way to automate installation) because it's good
that everyone understands how things are done. If something is unclear
in the instructions, feel free to ask me(@kitakar5525) via opening a issue.

for brunch

Run the following commands under brunch chromeos.
(Can be run under dual-booted linux but then, make sure that there is
only one partition labeled ROOT-C (lsblk).)

Extract ROOT-C archive onto ROOT-C:

ROOT_C_MOUNT_DIR="/tmp/mnt/ROOT-C"

# 1. mount ROOT-C
sudo mkdir $ROOT_C_MOUNT_DIR
sudo mount /dev/disk/by-label/ROOT-C $ROOT_C_MOUNT_DIR

# 2. remove existing kitakar5525 kernel first
rm -rf $ROOT_C_MOUNT_DIR/packages/kitakar5525-kernel/*

# 3. (extra step)
# Requires ROOT-C free space about 100MB. Current brunch release has
# that extra space but in future releases, you might need to create
# free space by removing existing brunch kernel files...
# rm -rf $ROOT_C_MOUNT_DIR/lib/kernel-devel
# rm -rf $ROOT_C_MOUNT_DIR/lib/iwlwifi_backport
# rm -rf $ROOT_C_MOUNT_DIR/lib/modules

# 4. extract archive onto ROOT-C
sudo tar -xf "${_archive_name_you_want_to_use_}-ROOT-C.tar.gz" -C $ROOT_C_MOUNT_DIR

# 5. cleanup
## unmount ROOT-C
sudo umount $ROOT_C_MOUNT_DIR

for chromiumos

Extract archive into somewhere. In that archive, there is an archive
for ROOT-A (packages/kitakar5525-kernel/${_archive_name_you_want_to_use_}.tar.gz).

Usually, you can't mount ROOT-A manually. So, do the following under
chromiumos (not from dual-booted linux).
Be careful that running the following commands outside of chromiumos
breaks the system.

Extract the ROOT-A archive onto ROOT-A and copy vmlinuz into
EFI-SYSTEM/syslinux/vmlinuz.A:

ROOT_C_ARCHIVE_EXTRACT_DIR="/tmp/ROOT-C_archive"
EFI_SYSTEM_MOUNT_DIR="/tmp/mnt/EFI-SYSTEM"

# 1. extract ROOT-C archive into somewhere
mkdir $ROOT_C_ARCHIVE_EXTRACT_DIR
sudo tar -xf "${_archive_name_you_want_to_use_}.tar.gz" -C $ROOT_C_ARCHIVE_EXTRACT_DIR

# 2. mount EFI-SYSTEM
mkdir $EFI_SYSTEM_MOUNT_DIR
sudo mount /dev/disk/by-label/EFI-SYSTEM $EFI_SYSTEM_MOUNT_DIR
# 3. remount root directory as rw
sudo mount / -o rw,remount

# 4. remove existing kernel files
sudo rm -rf /boot/*
sudo rm -rf /lib/modules/*

# 5. extract ROOT-A archive onto ROOT-A
sudo tar -xf "$ROOT_C_ARCHIVE_EXTRACT_DIR/packages/kitakar5525-kernel/${_archive_name_you_want_to_use_}-ROOT-A.tar.gz" -C /
# 6. copy vmlinuz into EFI-SYSTEM
cp $ROOT_C_ARCHIVE_EXTRACT_DIR/kernel $EFI_SYSTEM_MOUNT_DIR/syslinux/vmlinuz.A

# 7. cleanup
## remount root directory as ro
sudo mount / -o ro,remount
## unmount EFI-SYSTEM
sudo umount $EFI_SYSTEM_MOUNT_DIR

enrolling secureboot public key (for the first time)

You need to enroll my secureboot public key for the first time you use
this kernel.
Take a look here:

iptsd for v5.4

If your device uses IPTS, don't forget to install iptsd. (see https://github.com/kitakar5525/chromeos-kernel-linux-surface/tree/master/patch-to-os-image).

4.19.145 and 5.4.65

19 Sep 15:26
Compare
Choose a tag to compare
Note

I may test only v5.4-general-surface build. If something is not working on your Surface devices, feel free to open issues.

  • general-surface: using config-general-surface. Use this one If you want a more general kernel (closer to normal Linux distros, with support of Surface devices). Probably work also on non-surface devices.
  • minimal-surface: using config-minimal-surface. Use this one if you want a minimal kernel (closer to chromiumos' original kernels, with support of Surface devices). Chances are low to work on non-surface devices.
  • k5: abbreviation of kitakar5525. Means additional patches are applied.

Difference between v4.19 and v5.4

  • All the features that work/not-work with linux+linux-surface kernel should work/not-work also with this release.
  • It's reported that v4.19 kernels don't boot on SP7/SL3. Use v5.4 kernels.

IPTS Touchscreen on v5.4

Info: chromeos-v4.19.145-10241-g626b5f391c03+surface+k5

major issues

Currently, no major issues.

Info: chromeos-v5.4.65-8786-g8a928afdf43e+surface+k5

major issues

  • chromeos-5.4: tpm_tis causes kernel oops #20: I recommend adding module_blacklist=tpm_tis to bootloader.
  • wifi/bt unstable when using with iwl7000 #17: For now, using CONFIG_IWLWIFI instead of chromiumos' default CONFIG_IWL7000.

build command used

# git clone https://github.com/kitakar5525/linux-surface-kernel kitakar5525_linux-surface-kernel # for the first time
cd kitakar5525_linux-surface-kernel

# git clone https://github.com/kitakar5525/chromeos-kernel-linux-surface kitakar5525_chromeos-kernel-linux-surface # for the first time
cd kitakar5525_chromeos-kernel-linux-surface
git pull
cd ..

git pull --tags

########## v4.19 ##########
TAG_KERNEL="chromeos-v4.19.145-10241-g626b5f391c03+surface+k5"
git checkout $TAG_KERNEL

mkdir ../$TAG_KERNEL-config-minimal-log # logs will be placed into this dir
# minimal-surface
bash kitakar5525_chromeos-kernel-linux-surface/scripts/0001-generate-kernel-config/generate-config-minimal-surface-v419.sh \
    2>&1 | tee ../$TAG_KERNEL-config-minimal-log/0001-merge_config-log.txt
bash kitakar5525_chromeos-kernel-linux-surface/scripts/0002-build-kernel-using-make.sh \
    2>&1 | tee ../$TAG_KERNEL-config-minimal-log/0002-build-log.txt
fakeroot -- bash kitakar5525_chromeos-kernel-linux-surface/scripts/0003-package-kernel.sh \
    2>&1 | tee ../$TAG_KERNEL-config-minimal-log/0003-packaging-log.txt

mkdir ../$TAG_KERNEL-config-general-log # logs will be placed into this dir
# general-surface
bash kitakar5525_chromeos-kernel-linux-surface/scripts/0001-generate-kernel-config/generate-config-general-surface-v419.sh \
    2>&1 | tee ../$TAG_KERNEL-config-general-log/0001-config-general-merge_config-log.txt
bash kitakar5525_chromeos-kernel-linux-surface/scripts/0002-build-kernel-using-make.sh \
    2>&1 | tee ../$TAG_KERNEL-config-general-log/0002-config-general-build-log.txt
fakeroot -- bash kitakar5525_chromeos-kernel-linux-surface/scripts/0003-package-kernel.sh \
    2>&1 | tee ../$TAG_KERNEL-config-general-log/0003-config-general-packaging-log.txt

########## v5.4 ##########
TAG_KERNEL="chromeos-v5.4.65-8786-g8a928afdf43e+surface+k5"
git checkout $TAG_KERNEL

mkdir ../$TAG_KERNEL-config-minimal-log # logs will be placed into this dir
# minimal-surface
bash kitakar5525_chromeos-kernel-linux-surface/scripts/0001-generate-kernel-config/generate-config-minimal-surface-v54.sh \
    2>&1 | tee ../$TAG_KERNEL-config-minimal-log/0001-merge_config-log.txt
bash kitakar5525_chromeos-kernel-linux-surface/scripts/0002-build-kernel-using-make.sh \
    2>&1 | tee ../$TAG_KERNEL-config-minimal-log/0002-build-log.txt
fakeroot -- bash kitakar5525_chromeos-kernel-linux-surface/scripts/0003-package-kernel.sh \
    2>&1 | tee ../$TAG_KERNEL-config-minimal-log/0003-packaging-log.txt

mkdir ../$TAG_KERNEL-config-general-log # logs will be placed into this dir
# general-surface
bash kitakar5525_chromeos-kernel-linux-surface/scripts/0001-generate-kernel-config/generate-config-general-surface-v54.sh \
    2>&1 | tee ../$TAG_KERNEL-config-general-log/0001-merge_config-log.txt
bash kitakar5525_chromeos-kernel-linux-surface/scripts/0002-build-kernel-using-make.sh \
    2>&1 | tee ../$TAG_KERNEL-config-general-log/0002-build-log.txt
fakeroot -- bash kitakar5525_chromeos-kernel-linux-surface/scripts/0003-package-kernel.sh \
    2>&1 | tee ../$TAG_KERNEL-config-general-log/0003-packaging-log.txt

Installation

Please read the whole instructions before you try to install until you
understand what the following commands do. I won't provide install scripts
(i.e. I won't provide a way to automate installation) because it's good
that everyone understands how things are done. If something is unclear
in the instructions, feel free to ask me(@kitakar5525) via opening a issue.

for brunch

Run the following commands under brunch chromeos.
(Can be run under dual-booted linux but then, make sure that there is
only one partition labeled ROOT-C (lsblk).)

Extract ROOT-C archive onto ROOT-C:

ROOT_C_MOUNT_DIR="/tmp/mnt/ROOT-C"

# 1. mount ROOT-C
sudo mkdir $ROOT_C_MOUNT_DIR
sudo mount /dev/disk/by-label/ROOT-C $ROOT_C_MOUNT_DIR

# 2. remove existing kitakar5525 kernel first
rm -rf $ROOT_C_MOUNT_DIR/packages/kitakar5525-kernel/*

# 3. (extra step)
# Requires ROOT-C free space about 100MB. Current brunch release has
# that extra space but in future releases, you might need to create
# free space by removing existing brunch kernel files...
# rm -rf $ROOT_C_MOUNT_DIR/lib/headers
# rm -rf $ROOT_C_MOUNT_DIR/lib/iwlwifi_backport
# rm -rf $ROOT_C_MOUNT_DIR/lib/modules

# 4. extract archive onto ROOT-C
sudo tar -xf "${_archive_name_you_want_to_use_}-ROOT-C.tar.gz" -C $ROOT_C_MOUNT_DIR

# 5. cleanup
## unmount ROOT-C
sudo umount $ROOT_C_MOUNT_DIR

for chromiumos

Extract archive into somewhere. In that archive, there is an archive
for ROOT-A (packages/kitakar5525-kernel/${_archive_name_you_want_to_use_}.tar.gz).

Usually, you can't mount ROOT-A manually. So, do the following under
chromiumos (not from dual-booted linux).
Be careful that running the following commands outside of chromiumos
breaks the system.

Extract the ROOT-A archive onto ROOT-A and copy vmlinuz into
EFI-SYSTEM/syslinux/vmlinuz.A:

ROOT_C_ARCHIVE_EXTRACT_DIR="/tmp/ROOT-C_archive"
EFI_SYSTEM_MOUNT_DIR="/tmp/mnt/EFI-SYSTEM"

# 1. extract ROOT-C archive into somewhere
mkdir $ROOT_C_ARCHIVE_EXTRACT_DIR
sudo tar -xf "${_archive_name_you_want_to_use_}.tar.gz" -C $ROOT_C_ARCHIVE_EXTRACT_DIR

# 2. mount EFI-SYSTEM
mkdir $EFI_SYSTEM_MOUNT_DIR
sudo mount /dev/disk/by-label/EFI-SYSTEM $EFI_SYSTEM_MOUNT_DIR
# 3. remount root directory as rw
sudo mount / -o rw,remount

# 4. remove existing kernel files
sudo rm -rf /boot/*
sudo rm -rf /lib/modules/*

# 5. extract ROOT-A archive onto ROOT-A
sudo tar -xf "$ROOT_C_ARCHIVE_EXTRACT_DIR/packages/kitakar5525-kernel/${_archive_name_you_want_to_use_}-ROOT-A.tar.gz" -C /
# 6. copy vmlinuz into EFI-SYSTEM
cp $ROOT_C_ARCHIVE_EXTRACT_DIR/kernel $EFI_SYSTEM_MOUNT_DIR/syslinux/vmlinuz.A

# 7. cleanup
## remount root directory as ro
sudo mount / -o ro,remount
## unmount EFI-SYSTEM
sudo umount $EFI_SYSTEM_MOUNT_DIR

enrolling secureboot public key (for the first time)

You need to enroll my secureboot public key for the first time you use
this kernel.
Take a look here:

iptsd for v5.4

If your device uses IPTS, don't forget to install iptsd. (see https://github.com/kitakar5525/chromeos-kernel-linux-surface/tree/master/patch-to-os-image).

4.19.131 and 5.4.50

11 Jul 11:57
Compare
Choose a tag to compare
Note

  • general-surface: using config-general-surface. Use this one If you want a more general kernel (closer to normal Linux distros, with support of Surface devices). Probably work also on non-surface devices.
  • minimal-surface: using config-minimal-surface. Use this one if you want a minimal kernel (closer to chromiumos' original kernels, with support of Surface devices). Chances are low to work on non-surface devices.
  • k5: abbreviation of kitakar5525

Difference between v4.19 and v5.4

  • All the features that work/not-work with linux+linux-surface kernel should work/not-work also with this release. So, if you have devices that use IPTS, you may want to use v4.19 one for finger multitouch. What devices use IPTS and what devices don't?
  • It's reported that v4.19 kernels don't boot on SP7/SL3. Use v5.4 kernels.

Info: 4.19.131

major issues

Currently, no major issues.

Info: 5.4.50

major issues

  • chromeos-5.4: tpm_tis causes kernel oops #20: I recommend adding module_blacklist=tpm_tis to bootloader.
  • wifi/bt unstable when using with iwl7000 #17: For now, using CONFIG_IWLWIFI instead of chromiumos' default CONFIG_IWL7000.
  • chromeos-5.4: backlight not adjustable #23: Affects Surface 3. For now, I recommend using v4.19 kernels.

Build command used

# git clone https://github.com/kitakar5525/linux-surface-kernel kitakar5525_linux-surface-kernel # for the first time
cd kitakar5525_linux-surface-kernel

# git clone https://github.com/kitakar5525/chromeos-kernel-linux-surface kitakar5525_chromeos-kernel-linux-surface # for the first time
cd kitakar5525_chromeos-kernel-linux-surface
git pull
cd ..

git pull --tags

########## v4.19 ##########
TAG_KERNEL="chromeos-v4.19.131-9617-gd4dff7372342+surface+k5-2"
git checkout $TAG_KERNEL

mkdir ../$TAG_KERNEL-config-minimal-log # logs will be placed into this dir
# minimal-surface
bash kitakar5525_chromeos-kernel-linux-surface/scripts/0001-generate-kernel-config/generate-config-minimal-surface-v419.sh \
    2>&1 | tee ../$TAG_KERNEL-config-minimal-log/0001-merge_config-log.txt
bash kitakar5525_chromeos-kernel-linux-surface/scripts/0002-build-kernel-using-make.sh \
    2>&1 | tee ../$TAG_KERNEL-config-minimal-log/0002-build-log.txt
fakeroot -- bash kitakar5525_chromeos-kernel-linux-surface/scripts/0003-package-kernel.sh \
    2>&1 | tee ../$TAG_KERNEL-config-minimal-log/0003-packaging-log.txt

mkdir ../$TAG_KERNEL-config-general-log # logs will be placed into this dir
# general-surface
bash kitakar5525_chromeos-kernel-linux-surface/scripts/0001-generate-kernel-config/generate-config-general-surface-v419.sh \
    2>&1 | tee ../$TAG_KERNEL-config-general-log/0001-config-general-merge_config-log.txt
bash kitakar5525_chromeos-kernel-linux-surface/scripts/0002-build-kernel-using-make.sh \
    2>&1 | tee ../$TAG_KERNEL-config-general-log/0002-config-general-build-log.txt
fakeroot -- bash kitakar5525_chromeos-kernel-linux-surface/scripts/0003-package-kernel.sh \
    2>&1 | tee ../$TAG_KERNEL-config-general-log/0003-config-general-packaging-log.txt

########## v5.4 ##########
TAG_KERNEL="chromeos-v5.4.50-6709-g7f2e5f228262+surface+k5-2"
git checkout $TAG_KERNEL

mkdir ../$TAG_KERNEL-config-minimal-log # logs will be placed into this dir
# minimal-surface
bash kitakar5525_chromeos-kernel-linux-surface/scripts/0001-generate-kernel-config/generate-config-minimal-surface-v54.sh \
    2>&1 | tee ../$TAG_KERNEL-config-minimal-log/0001-merge_config-log.txt
bash kitakar5525_chromeos-kernel-linux-surface/scripts/0002-build-kernel-using-make.sh \
    2>&1 | tee ../$TAG_KERNEL-config-minimal-log/0002-build-log.txt
fakeroot -- bash kitakar5525_chromeos-kernel-linux-surface/scripts/0003-package-kernel.sh \
    2>&1 | tee ../$TAG_KERNEL-config-minimal-log/0003-packaging-log.txt

mkdir ../$TAG_KERNEL-config-general-log # logs will be placed into this dir
# general-surface
bash kitakar5525_chromeos-kernel-linux-surface/scripts/0001-generate-kernel-config/generate-config-general-surface-v54.sh \
    2>&1 | tee ../$TAG_KERNEL-config-general-log/0001-merge_config-log.txt
bash kitakar5525_chromeos-kernel-linux-surface/scripts/0002-build-kernel-using-make.sh \
    2>&1 | tee ../$TAG_KERNEL-config-general-log/0002-build-log.txt
fakeroot -- bash kitakar5525_chromeos-kernel-linux-surface/scripts/0003-package-kernel.sh \
    2>&1 | tee ../$TAG_KERNEL-config-general-log/0003-packaging-log.txt

Installation

Please read the whole instructions before you try to install until you
understand what the following commands do. I won't provide install scripts
(i.e. I won't provide a way to automate installation) because it's good
that everyone understands how things are done. If something is unclear
in the instructions, feel free to ask me(@kitakar5525) via opening a issue.

for brunch

Run the following commands under brunch chromeos.
(Can be run under dual-booted linux but then, make sure that there is
only one partition labeled ROOT-C (lsblk).)

Extract ROOT-C archive onto ROOT-C:

ROOT_C_MOUNT_DIR="/tmp/mnt/ROOT-C"

# 1. mount ROOT-C
sudo mkdir $ROOT_C_MOUNT_DIR
sudo mount /dev/disk/by-label/ROOT-C $ROOT_C_MOUNT_DIR

# 2. remove existing kitakar5525 kernel first
rm -rf $ROOT_C_MOUNT_DIR/packages/kitakar5525-kernel/*

# 3. (extra step)
# Requires ROOT-C free space about 100MB. Current brunch release has
# that extra space but in future releases, you might need to create
# free space by removing existing brunch kernel files...
# rm -rf $ROOT_C_MOUNT_DIR/lib/headers
# rm -rf $ROOT_C_MOUNT_DIR/lib/iwlwifi_backport
# rm -rf $ROOT_C_MOUNT_DIR/lib/modules

# 4. extract archive onto ROOT-C
sudo tar -xf "${_archive_name_you_want_to_use_}-ROOT-C.tar.gz" -C $ROOT_C_MOUNT_DIR

# 5. cleanup
## unmount ROOT-C
sudo umount $ROOT_C_MOUNT_DIR

for chromiumos

Extract archive into somewhere. In that archive, there is an archive
for ROOT-A (packages/kitakar5525-kernel/${_archive_name_you_want_to_use_}.tar.gz).

Usually, you can't mount ROOT-A manually. So, do the following under
chromiumos (not from dual-booted linux).
Be careful that running the following commands outside of chromiumos
breaks the system.

Extract the ROOT-A archive onto ROOT-A and copy vmlinuz into
EFI-SYSTEM/syslinux/vmlinuz.A:

ROOT_C_ARCHIVE_EXTRACT_DIR="/tmp/ROOT-C_archive"
EFI_SYSTEM_MOUNT_DIR="/tmp/mnt/EFI-SYSTEM"

# 1. extract ROOT-C archive into somewhere
mkdir $ROOT_C_ARCHIVE_EXTRACT_DIR
sudo tar -xf "${_archive_name_you_want_to_use_}.tar.gz" -C $ROOT_C_ARCHIVE_EXTRACT_DIR

# 2. mount EFI-SYSTEM
mkdir $EFI_SYSTEM_MOUNT_DIR
sudo mount /dev/disk/by-label/EFI-SYSTEM $EFI_SYSTEM_MOUNT_DIR
# 3. remount root directory as rw
sudo mount / -o rw,remount

# 4. remove existing kernel files
sudo rm -rf /boot/*
sudo rm -rf /lib/modules/*

# 5. extract ROOT-A archive onto ROOT-A
sudo tar -xf "$ROOT_C_ARCHIVE_EXTRACT_DIR/packages/kitakar5525-kernel/${_archive_name_you_want_to_use_}-ROOT-A.tar.gz" -C /
# 6. copy vmlinuz into EFI-SYSTEM
cp $ROOT_C_ARCHIVE_EXTRACT_DIR/kernel $EFI_SYSTEM_MOUNT_DIR/syslinux/vmlinuz.A

# 7. cleanup
## remount root directory as ro
sudo mount / -o ro,remount
## unmount EFI-SYSTEM
sudo umount $EFI_SYSTEM_MOUNT_DIR

enrolling secureboot public key (for the first time)

You need to enroll my secureboot public key for the first time you use
this kernel.
Take a look here:

4.19.126 and 5.4.44

07 Jun 18:59
Compare
Choose a tag to compare
Note

  • general-surface: using config-general-surface. Use this one If you want a more general kernel (closer to normal Linux distros, with support of Surface devices). Probably work also on non-surface devices.
  • minimal-surface: using config-minimal-surface. Use this one if you want a minimal kernel (closer to chromiumos' original kernels, with support of Surface devices). Chances are low to work on non-surface devices.
  • k5: abbreviation of kitakar5525

Difference between v4.19 and v5.4

  • All the features that work/not-work with linux+linux-surface kernel should work/not-work also with this release. So, if you have devices that use IPTS, you may want to use v4.19 one for finger multitouch. What devices use IPTS and what devices don't?
  • It's reported that v4.19 kernels don't boot on SP7/SL3. Use v5.4 kernels.

Info: 4.19.126-09205-g5e9fefe31794

issues

Currently, no major issues.

Info: 5.4.44-04916-g18fcaa7f293d

issues

  • chromeos-5.4: tpm_tis causes kernel oops #20. I recommend adding module_blacklist=tpm_tis to bootloader.
  • wifi/bt unstable when using with iwl7000 #17: For now, using CONFIG_IWLWIFI instead of chromiumos' default CONFIG_IWL7000.

chromeos-v5.4.39.r4076.d37238f2773c3-surface-brunch+no_iwl7000

Testing release for #17

Note

Using the same kernel tree as chromeos-v5.4.39.r4076.d37238f2773c3-surface-brunch but updated kernel config.
The actual generated config diff against chromeos-v5.4.39.r4076.d37238f2773c3-surface-brunch:

@@ -3640,6 +3640,21 @@ CONFIG_IWLEGACY_DEBUG=y
 CONFIG_IWLEGACY_DEBUGFS=y
 # end of iwl3945 / iwl4965 Debugging Options
 
+CONFIG_IWLWIFI=m
+CONFIG_IWLWIFI_LEDS=y
+CONFIG_IWLDVM=m
+CONFIG_IWLMVM=m
+CONFIG_IWLWIFI_OPMODE_MODULAR=y
+# CONFIG_IWLWIFI_BCAST_FILTERING is not set
+
+#
+# Debugging Options
+#
+CONFIG_IWLWIFI_DEBUG=y
+CONFIG_IWLWIFI_DEBUGFS=y
+CONFIG_IWLWIFI_DEVICE_TRACING=y
+# end of Debugging Options
+
 CONFIG_WLAN_VENDOR_INTERSIL=y
 CONFIG_HOSTAP=m
 CONFIG_HOSTAP_FIRMWARE=y
@@ -3664,13 +3679,7 @@ CONFIG_P54_SPI=m
 # CONFIG_P54_SPI_DEFAULT_EEPROM is not set
 CONFIG_P54_LEDS=y
 CONFIG_PRISM54=m
-CONFIG_IWL7000=m
-CONFIG_IWL7000_LEDS=y
-CONFIG_IWL7000_DEBUGFS=y
-CONFIG_IWL7000_TRACING=y
-CONFIG_IWL7000_TESTMODE=y
-CONFIG_IWL7000_XVT=m
-CONFIG_IWL7000_VENDOR_CMDS=y
+# CONFIG_IWL7000 is not set
 CONFIG_WLAN_VENDOR_MARVELL=y
 CONFIG_LIBERTAS=m
 CONFIG_LIBERTAS_USB=m

build command

build command diff against chromeos-v5.4.39.r4076.d37238f2773c3-surface-brunch

@@ -60,6 +60,10 @@ CONFIG_KERNEL_GZIP=y
 # (arc continuously crashing without this change at least on 4.19)
 # CONFIG_NETFILTER_XT_MATCH_OWNER is not set
 CONFIG_NETFILTER_XT_MATCH_QTAGUID=y
+
+# https://github.com/kitakar5525/chromeos-kernel-linux-surface/issues/17
+# need to unset IWL7000 to set IWLWIFI
+# CONFIG_IWL7000 is not set
 EOS
 
 # a lot of output for the first time. So, using `> /dev/null`

All the other info is the same as chromeos-v5.4.39.r4076.d37238f2773c3-surface-brunch.

chromeos-v5.4.39.r4076.d37238f2773c3-surface-brunch+iwl7000_core52-81

Testing release for #17

Note

Adding iwl7000 driver update (kitakar5525/linux-kernel@037122e) on top of chromeos-v5.4.39.r4076.d37238f2773c3-surface-brunch.

kernel tree: https://github.com/kitakar5525/linux-surface-kernel/commits/chromeos-v5.4.39.r4076.d37238f2773c3-surface-brunch+iwl7000_core52-81

build command

(same as chromeos-v5.4.39.r4076.d37238f2773c3-surface-brunch)

All the other info is the same as chromeos-v5.4.39.r4076.d37238f2773c3-surface-brunch.

chromeos-v5.4.39.r4076.d37238f2773c3-surface-brunch

Always backup local files before updating kernel; it may refresh your local data.

Issues:

  • Not bootable on SB1 !!!. It reboots on chrome logo. (But works well on Surface 3... why?)
    I released this binary anyway because it works with Surface 3. I'll look into what's happening on SB1 later.
    So, if you want to use v5.4 kernels but this release doesn't work, try 5.4.24 version for now.
    EDIT: after installing other kernel version then reinstalling this version, it started working on SB1. Hmm?

  • Surface 3: config-general-surface: ACPI error messages appear continuously on dmesg #15
    Because of this issue, mark this release as pre-release.

Note: I switched kernel config from config-minimal-surface to config-general-surface from this release.

build command

git clone https://github.com/kitakar5525/linux-surface-kernel
git pull --tags
git checkout chromeos-v5.4.39.r4076.d37238f2773c3-surface-brunch

# arch-lts54 kernel config
wget "https://git.archlinux.org/svntogit/packages.git/plain/trunk/config?h=packages/linux-lts" -q --show-progress -O config_archlinux-lts54

# linux-surface latest stable kernel config fragment
wget https://raw.githubusercontent.com/linux-surface/linux-surface/master/configs/surface-5.6.config -q --show-progress -O config_surface-stable-fragment

# generate chromiumos-x86_64 fragment
chromeos/scripts/prepareconfig chromiumos-x86_64
mv .config config_chromiumos-x86_64-prepareconfig

# my config changes. you can also place your changes here if you want.
cat << EOS > config_mychanges-fragment
CONFIG_5525_ACPI_CALL=m
# CONFIG_DEBUG_INFO is not set
CONFIG_PCIEASPM_DEBUG=y

# testing
CONFIG_BYTCRC_PMIC_OPREGION=y
CONFIG_CHTCRC_PMIC_OPREGION=y

# for debugging Surface 3 touchscreen input
CONFIG_SPI_PXA2XX=m
CONFIG_SPI_PXA2XX_PCI=m

# https://github.com/kitakar5525/chromeos-kernel-linux-surface/issues/3
# CONFIG_MODULE_COMPRESS is not set

# https://github.com/kitakar5525/chromeos-kernel-linux-surface/issues/8
# and https://github.com/kitakar5525/chromeos-kernel-linux-surface#direct-firmware-load-for-firmware-file-failed-with-error--2
CONFIG_DRM_I915=m

# https://github.com/kitakar5525/chromeos-kernel-linux-surface/issues/9
CONFIG_TCG_TPM=m
CONFIG_TCG_TIS_CORE=m
CONFIG_TCG_TIS_SPI=m
CONFIG_TCG_TIS=m
CONFIG_TCG_VIRTIO_VTPM=m

# built-in storage related config
CONFIG_MMC_BLOCK=y

# security options
CONFIG_DEFAULT_SECURITY_CHROMIUMOS=y
# CONFIG_DEFAULT_SECURITY_DAC is not set
CONFIG_LSM="lockdown,yama,loadpin,safesetid,integrity,chromiumos,selinux"

# Enable kernel headers through /sys/kernel/kheaders.tar.xz
CONFIG_IKHEADERS=m

# https://github.com/systemd/systemd/blob/master/README
CONFIG_EFIVAR_FS=y

# to match stock chromiumos config
CONFIG_KERNEL_GZIP=y
# CONFIG_KERNEL_XZ is not set

# resolve "Actual value" not changing to "Requested value"
# caused by "NETFILTER_XT_MATCH_OWNER is not set"
# not specified in chromiumos-x86_64 prepareconfig
# (arc continuously crashing without this change at least on 4.19)
# CONFIG_NETFILTER_XT_MATCH_OWNER is not set
CONFIG_NETFILTER_XT_MATCH_QTAGUID=y
EOS

# a lot of output for the first time. So, using `> /dev/null`
# arch54 + chromiumos-x86_64 + surface55 + mychanges
scripts/kconfig/merge_config.sh config_archlinux-lts54 \
config_chromiumos-x86_64-prepareconfig \
config_surface-stable-fragment \
config_mychanges-fragment > /dev/null
cp .config config_arch54+chromiumos-x86_64+surface55+mychanges

# second time, check the generated config. So, not using `> /dev/null` here.
# you may be interested in "Requested value" vs "Actual value".
scripts/kconfig/merge_config.sh .config \
config_chromiumos-x86_64-prepareconfig \
config_surface-stable-fragment \
config_mychanges-fragment
cp .config config_arch54+chromiumos-x86_64+surface55+mychanges

export KVER=5_4 # kernel version you want to build
export KVER_PERIOD=$(echo $KVER | sed s/_/./)

kernver="$(make -s kernelrelease)"
export INSTALL_MOD_PATH=../chromeos-kernel-linux-surface-$kernver # modules will be exported to $INSTALL_MOD_PATH/lib/modules/$kernver
export INSTALL_PATH=../chromeos-kernel-linux-surface-$kernver/boot; mkdir -p $INSTALL_PATH 
export INSTALL_MOD_STRIP=1 # to reduce the modules size (one example: 487M -> 35M)
modulesdir="$INSTALL_MOD_PATH/lib/modules/$kernver"

### build the kernel
make -j$(nproc --all) bzImage modules
# export the built modules
make modules_install # exported to $INSTALL_MOD_PATH
# remove build and source links
rm "$modulesdir"/{source,build}

# copy vmlinuz, System.map, and config
# not using `make install` because it seems that depending on distros
# used to build the kernel, config may not be installed.
# Filename may also vary. So, explicitly copy them manually...
cp arch/x86_64/boot/bzImage $INSTALL_PATH/vmlinuz-${kernver}
cp System.map* $INSTALL_PATH/System.map-${kernver}
cp .config $INSTALL_PATH/config-${kernver}

# copy files to build/ for external module building
mkdir "$modulesdir"/build
cp Module.symvers "$modulesdir"/build
cp $INSTALL_PATH/config-${kernver} "$modulesdir"/build/.config
cp $INSTALL_PATH/System.map-${kernver} "$modulesdir"/build/System.map

# compress lib dir
tar -C $INSTALL_MOD_PATH -czf $INSTALL_MOD_PATH/lib.tar.gz lib && rm -rf $INSTALL_MOD_PATH/lib
# compress the whole dir if you want
tar -czf ${INSTALL_MOD_PATH}.tar.gz $INSTALL_MOD_PATH && rm -rf $INSTALL_MOD_PATH

Installation

Chromium OS:

  1. Extract the release binary
  2. Extract the compressed lib dir (lib.tar.gz)
  3. Copy the lib dir under ROOT-A/
  4. Copy the boot/vmlinuz* to EFI-SYSTEM/syslinux/vmlinuz.A

Brunch:

  1. Extract the release binary
  2. Extract the compressed lib dir (lib.tar.gz)
  3. Copy the lib dir under ROOT-C/
  4. Copy the boot/vmlinuz* to ROOT-C/kernel

Note: kernel is not signed with secure boot key. Please do it manually yourself for now.

Note 2: for Chromium OS, you need to install mwifiex firmware.

Note 3: for Brunch, you need to resize ROOT-C to larger size (e.g. 2GB) until #3 is fixed because size of this kernel is too large without compression due to general kernel config (config-general-surface).

Note

Kernel tree info:

This build contains patches from linux-surface and brunch.
Especially, including the following patches that is necessary for brunch framework:

The product_name will be "Brunch".

$ cat /sys/devices/virtual/dmi/id/product_name
Brunch
  • IPTS supports Stylus and Singletouch finger input and not support Multitouch finger input yet. Default is in Multitouch mode. You can toggle the mode like this: sudo modprobe -r ipts; sudo modprobe ipts singletouch=Y. If you need Multitouch finger input support, use 4.19 kernels for now.

chromeos-v4.19.121.r9069.a3d5a26405f2c-surface-brunch

Always backup local files before updating kernel; it may refresh your local data.

Issues:

  • Surface 3: config-general-surface: ACPI error messages appear continuously on dmesg #15
    Because of this issue, mark this release as pre-release.

Note: I switched kernel config from config-minimal-surface to config-general-surface from this release.

build command

git clone https://github.com/kitakar5525/linux-surface-kernel
git pull --tags
git checkout chromeos-v4.19.121.r9069.a3d5a26405f2c-surface-brunch

# arch-lts419 kernel config
wget "https://aur.archlinux.org/cgit/aur.git/plain/config?h=linux-lts419" -q --show-progress -O config_archlinux-lts419

# linux-surface 4.19 kernel config fragment
wget https://raw.githubusercontent.com/linux-surface/linux-surface/master/configs/surface-4.19.config -q --show-progress -O config_surface-4.19-fragment

# generate chromiumos-x86_64 fragment
chromeos/scripts/prepareconfig chromiumos-x86_64
mv .config config_chromiumos-x86_64-prepareconfig

# my config changes. you can also place your changes here if you want.
cat << EOS > config_mychanges-fragment
CONFIG_5525_ACPI_CALL=m
# CONFIG_DEBUG_INFO is not set
CONFIG_VIDEO_IPU3_IMGU=m
CONFIG_PCIEASPM_DEBUG=y

# for debugging Surface 3 touchscreen input
CONFIG_SPI_PXA2XX=m
CONFIG_SPI_PXA2XX_PCI=m

# https://github.com/kitakar5525/chromeos-kernel-linux-surface/issues/3
# CONFIG_MODULE_COMPRESS is not set

# https://github.com/kitakar5525/chromeos-kernel-linux-surface/issues/8
# and https://github.com/kitakar5525/chromeos-kernel-linux-surface#direct-firmware-load-for-firmware-file-failed-with-error--2
CONFIG_DRM_I915=m

# https://github.com/kitakar5525/chromeos-kernel-linux-surface/issues/9
CONFIG_TCG_TIS_CORE=m
CONFIG_TCG_TIS=m
CONFIG_TCG_VIRTIO_VTPM=m

# built-in storage related config
CONFIG_MMC_BLOCK=y

# init: Unable to mount /sys/fs/selinux filesystem: No such file or directory
# then kernel panic (and reboot)
CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=1
CONFIG_DEFAULT_SECURITY_SELINUX=y
# CONFIG_DEFAULT_SECURITY_DAC is not set
CONFIG_DEFAULT_SECURITY="selinux"

# Enable kernel headers through /sys/kernel/kheaders.tar.xz
CONFIG_IKHEADERS=m

# https://github.com/systemd/systemd/blob/master/README
CONFIG_EFIVAR_FS=y

# to match stock chromiumos config
CONFIG_KERNEL_GZIP=y
# CONFIG_KERNEL_XZ is not set

# resolve "Actual value" not changing to "Requested value"
# caused by "NETFILTER_XT_MATCH_OWNER is not set"
# not specified in chromiumos-x86_64 prepareconfig
# (arc continuously crashing without this change)
# CONFIG_NETFILTER_XT_MATCH_OWNER is not set
CONFIG_NETFILTER_XT_MATCH_QTAGUID=y
EOS

# a lot of output for the first time. So, using `> /dev/null`
# arch419 + chromiumos-x86_64 + surface419 + mychanges
scripts/kconfig/merge_config.sh config_archlinux-lts419 \
config_chromiumos-x86_64-prepareconfig \
config_surface-4.19-fragment \
config_mychanges-fragment > /dev/null
cp .config config_arch419+chromiumos-x86_64+surface419+mychanges

# second time, check the generated config. So, not using `> /dev/null` here.
# you may be interested in "Requested value" vs "Actual value".
scripts/kconfig/merge_config.sh .config \
config_chromiumos-x86_64-prepareconfig \
config_surface-4.19-fragment \
config_mychanges-fragment
cp .config config_arch419+chromiumos-x86_64+surface419+mychanges

# memo
cat << EOS
# useful when you have to reload modules?
CONFIG_I2C_HID=m
EOS

export KVER=4_19 # kernel version you want to build
export KVER_PERIOD=$(echo $KVER | sed s/_/./)

kernver="$(make -s kernelrelease)"
export INSTALL_MOD_PATH=../chromeos-kernel-linux-surface-$kernver # modules will be exported to $INSTALL_MOD_PATH/lib/modules/$kernver
export INSTALL_PATH=../chromeos-kernel-linux-surface-$kernver/boot; mkdir -p $INSTALL_PATH 
export INSTALL_MOD_STRIP=1 # to reduce the modules size (one example: 487M -> 35M)
modulesdir="$INSTALL_MOD_PATH/lib/modules/$kernver"

### build the kernel
make -j$(nproc --all) bzImage modules
# export the built modules
make modules_install # exported to $INSTALL_MOD_PATH
# remove build and source links
rm "$modulesdir"/{source,build}

# copy vmlinuz, System.map, and config
# not using `make install` because it seems that depending on distros
# used to build the kernel, config may not be installed.
# Filename may also vary. So, explicitly copy them manually...
cp arch/x86_64/boot/bzImage $INSTALL_PATH/vmlinuz-${kernver}
cp System.map* $INSTALL_PATH/System.map-${kernver}
cp .config $INSTALL_PATH/config-${kernver}

# copy files to build/ for external module building
mkdir "$modulesdir"/build
cp Module.symvers "$modulesdir"/build
cp $INSTALL_PATH/config-${kernver} "$modulesdir"/build/.config
cp $INSTALL_PATH/System.map-${kernver} "$modulesdir"/build/System.map

# compress lib dir
tar -C $INSTALL_MOD_PATH -czf $INSTALL_MOD_PATH/lib.tar.gz lib && rm -rf $INSTALL_MOD_PATH/lib
# compress the whole dir if you want
tar -czf ${INSTALL_MOD_PATH}.tar.gz $INSTALL_MOD_PATH && rm -rf $INSTALL_MOD_PATH

Installation

Chromium OS:

  1. Extract the release binary
  2. Extract the compressed lib dir (lib.tar.gz)
  3. Copy the lib dir under ROOT-A/
  4. Copy the boot/vmlinuz* to EFI-SYSTEM/syslinux/vmlinuz.A

Brunch:

  1. Extract the release binary
  2. Extract the compressed lib dir (lib.tar.gz)
  3. Copy the lib dir under ROOT-C/
  4. Copy the boot/vmlinuz* to ROOT-C/kernel

Note: kernel is not signed with secure boot key. Please do it manually yourself for now.

Note 2: for Chromium OS, you need to install mwifiex and ipts firmware.

Note 3: for Brunch, you need to resize ROOT-C to larger size (e.g. 2GB) until #3 is fixed because size of this kernel is too large without compression due to general kernel config (config-general-surface).

Note

Kernel tree info:

This build contains patches from linux-surface and brunch.
Especially, including the following patches that is necessary for brunch framework to work well on unibuild images.:

The product_name will be "Brunch".

$ cat /sys/devices/virtual/dmi/id/product_name
Brunch

chromeos-kernel-linux-surface-5.4.24

14 Mar 14:44
Compare
Choose a tag to compare

Always backup local files before updating kernel! Especially, be careful when switching kernel series (like 4.19 to 5.4); it may refresh your local data.

Currently, IPTS on 5.4 series don't support finger multitouch input. Take a look at 4.19 series for that support.
What devices use IPTS and what devices don't?: https://github.com/linux-surface/linux-surface/wiki/Installation-and-Setup#what-devices-use-ipts-and-what-devices-dont

Installation

NOTE:

  • IPTS supports Stylus and Singletouch finger input and not support Multitouch finger input yet. Default is in Multitouch mode. You can toggle the mode like this: sudo modprobe -r ipts; sudo modprobe ipts singletouch=1. If you need Multitouch finger input support, use 4.19 kernels for now.

  • mwifiex: wifi power_save
    Again added patches to disable power_save by default that is not available on linux-surface patches repo yet. So, no need to make a config file now.


patch and config version: 3.9
(https://github.com/kitakar5525/linux-surface-patches/releases/tag/v3.9)

Build command:

USE="${USE} -tpm" FEATURES="noclean" cros_workon_make --board=${BOARD} chromeos-kernel-5_4 --install

Installation:

  1. Extract the released binary (chromeos-kernel-linux-surface-5.4.xx.tar.xz)
  2. Extract the compressed modules dir (modules.tar.gz)
  3. Copy the modules dir into ROOT-A/lib/
  4. Copy the boot/vmlinuz-5.4.xx to EFI-SYSTEM/syslinux/vmlinuz.A

firmware:

Additionally, need to install mwifiex firmware

chromeos-kernel-linux-surface-4.19.107

14 Mar 14:38
Compare
Choose a tag to compare

Always backup local files before updating kernel! Especially, be careful when switching kernel series (like 4.19 to 5.4); it may refresh your local data.

Installation

NOTE:

  • mwifiex: wifi power_save
    Again added patches to disable power_save by default that is not available on linux-surface patches repo yet. So, no need to make a config file now.

patch and config version: 3.9
(https://github.com/kitakar5525/linux-surface-patches/releases/tag/v3.9)

Build command:

USE="${USE} -tpm" FEATURES="noclean" cros_workon_make --board=${BOARD} chromeos-kernel-4_19 --install

Installation:

  1. Extract the released binary (chromeos-kernel-linux-surface-4.19.xx.tar.xz)
  2. Extract the compressed modules dir (modules.tar.gz)
  3. Copy the modules dir into ROOT-A/lib/
  4. Copy the boot/vmlinuz-4.19.xx to EFI-SYSTEM/syslinux/vmlinuz.A

firmware:

Additionally, need to install mwifiex and IPTS firmware