您尚未登录。

#16 2023-12-05 17:19:13

qileilu
会员
注册时间: 2012-10-12
帖子: 92

Re: 办公室统一换电脑了,arm架构,我希望我还能再来论坛

这几周使用kylin系统里的/proc/config.gz(详见#14楼)编译了诸多内核,官方的从5.4、5.10到6.0、6.6等等,有的是直接编译出错,有的是编译成功,但是启动系统后网络声音全无,不过还是能启动archlinux系统。
我还试了phytium官方gitee上的嵌入式软件 / Phytium-Linux-Kernel(5.10)飞腾信息技术有限公司 / linux(6.1.y)不管是用自带的config还是我kylin上的config编译出来的核都无法正常启动Archlinux系统,我估计是那些嵌入板用的内核,不适合我这种“pc机”就没有再继续深究下去了。

试了那么多,其中5.10还算成功,网络成功驱动,声音不行。显卡的问题最后再说。
我用的PKGBUILD是照着HougeLangley/phytium-kernel-archlinux 的修改的,这里我学到了很多。
我修改后的PKGBUILD如下:

# AArch64 Phytium
# Maintainer: hougelangley1987@gmail.com

buildarch=8

pkgbase=linux-phytium
_srcname=linux-5.10
_kernelname=${pkgbase#linux}
_desc="AArch64 phytium-platform"
kernelversion=5.10
pkgver=5.10.153
pkgrel=2
arch=('aarch64')
url="http://www.kernel.org/"
license=('GPL2')
makedepends=('xmlto' 'docbook-xsl' 'kmod' 'inetutils' 'bc' 'git' 'uboot-tools' 'vboot-utils' 'dtc' 'clang' 'llvm' 'lld' 'python' )
options=('!strip')
source=("https://mirrors.ustc.edu.cn/kernel.org/linux/kernel/v5.x/${_srcname}.tar.xz"
        "https://mirrors.ustc.edu.cn/kernel.org/linux/kernel/v5.x/patch-${pkgver}.xz"
        'lc-phytium-config'
        '0001-add-phytium-id-from-acpi-to-stmmac.patch'
        '0002-phytium-ethernet-stmmac.patch'
        'linux.preset'
        '60-linux.hook'
        '90-linux.hook')
md5sums=('753adc474bf799d569dec4f165ed92c3'
         'f400313ced2deda18335757c6a3c4cf8'
         '34a34c8cf7f5f443b9e9c369c50eb8dc'
         'd1992b5aaf28b2ee0a8e4fbd4516dcc4'
         'c15f20cf6a6da0d70a1dd738fbc6ff4b'
         '41cb5fef62715ead2dd109dbea8413d6'
         '0a5f16bfec6ad982a2f6782724cca8ba'
         '3dc88030a8f2f5a5f97266d99b149f77')

prepare() {
  cd $_srcname

  echo "Setting version..."
  scripts/setlocalversion --save-scmversion
  echo "-$pkgrel" > localversion.10-pkgrel
  echo "${pkgbase#linux}" > localversion.20-pkgname

  # Apply patch
  patch -Np1 -i ../patch-${pkgver}

  # Apply bbr2 patch
   patch -Np1 -i ../0001-add-phytium-id-from-acpi-to-stmmac.patch
   patch -Np1 -i ../0002-phytium-ethernet-stmmac.patch

    
  # apply Phytium UOS kernel config, you could custom
  cat "${srcdir}/lc-phytium-config" > ./.config
  make olddefconfig
  make menuconfig

}

build() {
  cd ${_srcname}

  # get kernel version
  make prepare
  make -s kernelrelease > version

  # build!
  unset LDFLAGS
  make ${MAKEFLAGS} Image Image.gz modules
  # Generate device tree blobs with symbols to support applying device tree overlays in U-Boot
  make ${MAKEFLAGS} DTC_FLAGS="-@" dtbs
}

_package() {
  pkgdesc="The Linux Kernel and modules - ${_desc}"
  depends=('coreutils' 'linux-firmware' 'kmod' 'mkinitcpio>=0.7')
  optdepends=('crda: to set the correct wireless channels of your country')
  provides=("linux=${pkgver}" "WIREGUARD-MODULE")
  replaces=('linux-armv8')
  conflicts=('linux')
  backup=("etc/mkinitcpio.d/${pkgbase}.preset")
  install=${pkgname}.install

  cd $_srcname
  local kernver="$(<version)"
  local modulesdir="$pkgdir/usr/lib/modules/$kernver"

  echo "Installing boot image and dtbs..."
  install -Dm644 arch/arm64/boot/Image{,.gz} -t "${pkgdir}/boot"
  make INSTALL_DTBS_PATH="${pkgdir}/boot/dtbs" dtbs_install

  echo "Installing modules..."
  make INSTALL_MOD_PATH="$pkgdir/usr" INSTALL_MOD_STRIP=1 modules_install

  # remove build and source links
  rm "$modulesdir"/{source,build}

  # sed expression for following substitutions
  local _subst="
    s|%PKGBASE%|${pkgbase}|g
    s|%KERNVER%|${kernver}|g
  "

  # install mkinitcpio preset file
  sed "${_subst}" ../linux.preset |
    install -Dm644 /dev/stdin "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset"

  # install pacman hooks
  sed "${_subst}" ../60-linux.hook |
    install -Dm644 /dev/stdin "${pkgdir}/usr/share/libalpm/hooks/60-${pkgbase}.hook"
  sed "${_subst}" ../90-linux.hook |
    install -Dm644 /dev/stdin "${pkgdir}/usr/share/libalpm/hooks/90-${pkgbase}.hook"
}

_package-headers() {
  pkgdesc="Header files and scripts for building modules for linux kernel - ${_desc}"
  provides=("linux-headers=${pkgver}")
  conflicts=('linux-headers')

  cd $_srcname
  local builddir="$pkgdir/usr/lib/modules/$(<version)/build"

  echo "Installing build files..."
  install -Dt "$builddir" -m644 .config Makefile Module.symvers System.map \
    localversion.* version vmlinux
  install -Dt "$builddir/kernel" -m644 kernel/Makefile
  install -Dt "$builddir/arch/arm64" -m644 arch/arm64/Makefile
  cp -t "$builddir" -a scripts

  # add xfs and shmem for aufs building
  mkdir -p "$builddir"/{fs/xfs,mm}

  echo "Installing headers..."
  cp -t "$builddir" -a include
  cp -t "$builddir/arch/arm64" -a arch/arm64/include
  install -Dt "$builddir/arch/arm64/kernel" -m644 arch/arm64/kernel/asm-offsets.s
  mkdir -p "$builddir/arch/arm"
  cp -t "$builddir/arch/arm" -a arch/arm/include

  install -Dt "$builddir/drivers/md" -m644 drivers/md/*.h
  install -Dt "$builddir/net/mac80211" -m644 net/mac80211/*.h

  # https://bugs.archlinux.org/task/13146
  install -Dt "$builddir/drivers/media/i2c" -m644 drivers/media/i2c/msp3400-driver.h

  # https://bugs.archlinux.org/task/20402
  install -Dt "$builddir/drivers/media/usb/dvb-usb" -m644 drivers/media/usb/dvb-usb/*.h
  install -Dt "$builddir/drivers/media/dvb-frontends" -m644 drivers/media/dvb-frontends/*.h
  install -Dt "$builddir/drivers/media/tuners" -m644 drivers/media/tuners/*.h

  # https://bugs.archlinux.org/task/71392
  install -Dt "$builddir/drivers/iio/common/hid-sensors" -m644 drivers/iio/common/hid-sensors/*.h

  echo "Installing KConfig files..."
  find . -name 'Kconfig*' -exec install -Dm644 {} "$builddir/{}" \;

  echo "Removing unneeded architectures..."
  local arch
  for arch in "$builddir"/arch/*/; do
    [[ $arch = */arm64/ || $arch == */arm/ ]] && continue
    echo "Removing $(basename "$arch")"
    rm -r "$arch"
  done

  echo "Removing documentation..."
  rm -r "$builddir/Documentation"

  echo "Removing broken symlinks..."
  find -L "$builddir" -type l -printf 'Removing %P\n' -delete

  echo "Removing loose objects..."
  find "$builddir" -type f -name '*.o' -printf 'Removing %P\n' -delete

  echo "Stripping build tools..."
  local file
  while read -rd '' file; do
    case "$(file -bi "$file")" in
      application/x-sharedlib\;*)      # Libraries (.so)
        strip -v $STRIP_SHARED "$file" ;;
      application/x-archive\;*)        # Libraries (.a)
        strip -v $STRIP_STATIC "$file" ;;
      application/x-executable\;*)     # Binaries
        strip -v $STRIP_BINARIES "$file" ;;
      application/x-pie-executable\;*) # Relocatable binaries
        strip -v $STRIP_SHARED "$file" ;;
    esac
  done < <(find "$builddir" -type f -perm -u+x ! -name vmlinux -print0)

  echo "Adding symlink..."
  mkdir -p "$pkgdir/usr/src"
  ln -sr "$builddir" "$pkgdir/usr/src/$pkgbase"
}

pkgname=("${pkgbase}" "${pkgbase}-headers")
for _p in ${pkgname[@]}; do
  eval "package_${_p}() {
    _package${_p#${pkgbase}}
  }"
done

其中的0001-add-phytium-id-from-acpi-to-stmmac.patch和0002-phytium-ethernet-stmmac.patch来源于铜豌豆 Linux / atzlinux-kernel,这两个patch打上之后可以成功开启网络驱动,这里的其他patch试了一些,有的可能版本问题编译不成功,有的编译成功了没效果,目前和没有找到开启声音的办法。
其中的lc-phytium-config就是kylin系统里的/proc/config.gz。
其中的linux.preset、60-linux.hook、90-linux.hook就是HougeLangley/phytium-kernel-archlinux 里的文件未作修改。顺便说一下直接按照大神的phytium-config我也编译过,网络声音驱动不了,但是能成功启动archlinux.

用makepkg -Ccs编译,成功后在通过pacman -U安装对应的linux-phytium-5.10.153-2-aarch64.pkg.tar.xz包和linux-phytium-headers-5.10.153-2-aarch64.pkg.tar.xz包即可。

最后说一下显卡问题:
我的显卡是:JINGJIA MICRO JM7201 1G(详见#1楼)
通过搜索其核心芯片是mwv206。
景嘉微官方没有提供驱动,在gitee的找到老虎会游泳 / mwv206,应该没有错。
可是archlinux下编译不了,查了下源码,人家支持kylin、vos、deepin、neokylin这几个,典型的专用服务,其他的编不了。于是我切换到kylin下编译,果然没任何问题,然后按照其makeinstall的路径把相关文件复制到archlinux文件目录的对应位置(这是典型的不当操作,大神不要喷我),结果还是不能驱动显卡。
后来查到据说这个显卡有核内驱动和核外驱动,那还得去内核编译着手吗?
但我这个直接从kylinboot目录下拿来5.4.18-85-generic #74-KYLINOS 核显卡驱动的蛮好的呀!我是不是就该老老实实的用这个kylin的5.4.18核算了,唉
革命尚未成功,同志尚需努力!!

最近编辑记录 qileilu (2023-12-05 17:27:58)

离线

页脚