在全志的山寨平板上跑起linux

不是 chroot 也不是x86平板 没有利用安卓的任何一个部分 主线内核+主线uboot

现在退市的平板、机顶盒soc虽然难以胜任大部分日常使用的要求,但是完全可以胜任一些小项目,如语音助手或者智能镜子,监控的一些小demo的搭建,主要想看下现在主线对全志设备的支持怎样了嘿嘿😋。

结论:主线内核对soc的支持还是的确可以了,但是对于某些硬件的驱动还是不行,lima的3d驱动也仅仅停在可用的状态(很容易发生内存溢出,armbian正常运行需要调整内核参数给显示处理分配内存),对于某些涉及gpu的应用场景或者一些涉及摄像头的应用场景,可能sdk内核才可以,用安卓或者buildroot可能是个比较好的选择。。。。

GNU/linux对于安卓来说硬件效能的体验远远没有安卓好,主要是开源驱动和xorg的锅。

全志开源社区(linux-sunxi)比较给力,逆向工程出了vpu驱动,mali gpu驱动也提供了支持主线的二进制包,目前没试过,linux-sunxi里有说明,有需求的可以去试试。

注:这个博客只是一个尝试步骤的记录,可能不是实现的最简单办法。。。

这篇博文包含的主要内容:

Armbian 配置

开源驱动lima 试用

dts设备树调整

内核和uboot编译

Archlinuxarm rootfs配置


参考资料


全志设备Sdcard启动

http://wiki.lemaker.org/BananaPro/Pi:Building_u-boot,_script.bin_and_linux-kernel

主线内核支持程度

http://linux-sunxi.org/Linux_mainlining_effort

反编译安卓启动参数文件script.bin

https://blog.csdn.net/renpeng009672/article/details/49908489


寨板信息

安卓下用Device Info Hw查出来的。

Cpu Allwinner A13单核armv7(基本上所有部分被主线支持)

Gpu mail 400  (lima(开源mali驱动)在主线早就有了 用户层驱动在mesa里面 但是mesa近期才将lima并入,所以archlinux是首选,apt系的新mesa要一些功夫,arm64还好 (ubuntu 带lima的mesa ppa里有 但是只有arm64)

在官方的内核树中a13缺少对gpu的定义,需要自己加。还有mali的闭源驱动可以跑在主线上,奈何认不出gpu只好作罢,在linux-sunxi里明确表明主线支持gpu的设备可以试试。

Vpu(硬解视频) 主线在内核层支持(sunxi_defconfig默认已选上),用户层需要另行编译lib

Ram 512mb

分辨率 800x480

摄像机 gc0307( 驱动来自旧的内核 主线内核尚不支持)

时钟 pcf8563(主线支持)

重力传感器 mma7660(主线支持)

触摸屏 gsl1680(主线内核有驱动但是没有firmware github上有gsl-firmware 需要自己制作firmware 但是silead_ts认不出来我的固件,诡异,好在触摸不怎么用)

Wifi rtl8188eus(主线支持 但要自己编译成模块不在内核里)armbian的内核自带,推荐使用。

如果你也想搞一个这样的寨板可以考虑下全志的soc,它对启动设备可启动性的检查nand后于sdcard,非常适合测试,sunxi-fel还可以将uboot刷入内存临时启动,调试很方便。但是全志有些soc是powervr的gpu,这个gpu很难在主线内核上跑得动。(meamo leste 项目说他们用主线内核基本跑动了一些powervr的gpu)

寨板本身用的是官方安卓内核+sdk草草改一下加个logo其他完全是aosp

Linux-sunxi里讲官方的3.0.8内核是用的script.bin给内核初始化硬件

但是主线用的是dtb只能反编译script.bin 改dts和 配置了😑


开坑

调试环境推荐ubuntu 18.04,arch系qemu-arm-static弄不来,chroot不了arm的linux,需要交叉编译的gcc和sunxi-tools还有uboot-tools,qemu 这些官方源都有就不再阐述。


跑archlinuxarm(有坑)

  archlinux粗放打包的方式可能很吃空间,而且稳定运行重度依赖每天滚,如果不是要体验最新的mesa特性,建议还是使用armbian一类基于apt的发行版。

跑起主线uboot

直接下载最新版本的ubootftp://ftp.denx.de/pub/u-boot/

 uboot内置了一个defconfig叫a13-q8-tablet 用这个defconfig完美引导且lcd正常(全志a13 a23 a33 都有q8设备的配置 平板可以根据这几个config修改)

配置文件在uboot的configs文件夹里

开始编译

配置环境变量

export CROSS_COMPILE=arm-linux-gnueabihf-

export ARCH=arm

载入配置

       make q8_a13_tablet_defconfig

       make menuconfig

开整

make

之后会生成u-boot-sunxi-with-spl.bin

搞一张sd卡,用gparted建立msdos分区表!gpt uboot会覆盖它的分区表信息。。。。

用下列命令烧到sd卡里(uboot-dir表示文件位置 card表示/dev里设备的位置)

sudo dd if=${u-boot-dir}/u-boot-sunxi-with-spl.bin of=${card} bs=1024 seek=8

插到sd卡槽里重启可以看到uboot已经起来后进行下一步


配置rootfs

编译内核包(如果用我给定的内核或者armbian内核的可以跳过)

archlinuxarm的官方内核可能有坑(压根起不动)所以要单独编译适合自己硬件的内核

Archlinux的包管理与ubuntu不同所以要创建内核软件包就要chroot一个archlinuxarm。

在国内源或者archlinuxarm官网(要梯子不然很慢)搞到rootfs的压缩包

    wget http://os.archlinuxarm.org/os/ArchLinuxARM-armv7-latest.tar.gz

    bsdtar -xpf ArchLinuxARM-armv7-latest.tar.gz -C 《你的工作目录》

注:ubuntu 18.04的bsdtar 版本太低 2020.3的archlinuxarm的rootfs解包会报错

如果遇到如下情况恭喜中招:

bsdtar: Ignoring malformed pax extended attribute

bsdtar: Error exit delayed from previous errors.

所以要更新bsdtar

wget https://github.com/libarchive/libarchive/archive/v3.3.2.tar.gz

tar xf v3.3.2.tar.gz

cd libarchive-3.3.2

cmake .

make -j8

sudo make install

 得到rootfs后拷贝翻译器来chroot 

      cp /usr/bin/qemu-arm-static ./usr/bin

(archlinux的aur里有qemu-arm-static但是chroot不了。。。)

之后mount系统分区到rootfs

      sudo mount --bind /proc ./proc

      sudo mount --bind /dev ./dev

      sudo mount --bind /sys ./sys

进入rootfs

      sudo chroot ./

这个时候有可能上不了网在/etc/resolv.conf  加入以下内容指定dns

 nameserver 8.8.8.8

 nameserver 114.114.114.114

其他的就是基本的arch操作 滚(syu)之后装东西

建议还是换下源

修改/etc/pacman.d/mirrorlist

然后把arch的那一套编译工具(makepkg git gcc)用pacman装好这里不再阐述(有点不记得包名了)

之后把ArchlinuxArm的官方PKGBUILD从git上拉下来

 git clone https://github.com/archlinuxarm/PKGBUILDs.git

只要里面的./core/linux-armv7文件夹

按照自己的要求修改内核配置(目录下的config)

改配置去国内镜像站搞一套linux源代码来就可以了(版本要与pkgbuild里的一致)

内核的配置文件中提供了sunxi_defconfig 只提供了让CPU跑起来的最小配置

u盘,无线网默认都没有选上这是一个比较大的坑,还有lima要跑起来lima和sun4i-drm都必须要选上(最好是模块形式(M)便于调试)

配置好后复制.config到linux-armv7目录下替换config文件并生成MD5码

md5sum ./config

替换PKGBUILD文件里的md5码顺便替换下源这里用的清华源

source=("https://mirrors.tuna.tsinghua.edu.cn/kernel/v5.x/${_srcname}.tar.xz"

        "https://mirrors.tuna.tsinghua.edu.cn/kernel/v5.x/patch-${pkgver}.xz"

搞好后makepkg即可

调试设备树

在linux-armv7的文件夹下编译后会产生源码文件夹,进入内核文件夹按前文的方法设置好交叉编译环境变量

在./arch/boot/arm/dts文件夹下找到sun5i-a13-q8-tablet.dts 

具体设备树前面的&表示对soc级别的(dtsi)设备树的附加和修改

加入以下内容改变usb模式为主模式解决otg线用不了的问题

&usb_otg {

dr_mode = "host";

status = "okay";

};

开启VPU 用来硬解1080p视频

&be0 {

status = "okay";

};

&fe0 {

status = "okay";

};


触摸屏(按照反编译的script.bin得到配置)--固件加载有问题 Ubuntu的坑一样

设备树参数具体在linux内核的文档目录下(当然你的English要好)

/Documentation/devicetree/bindings/input/touchscreen/

例如我的silead gsl1680

6 11 对应sunxi格式的PG11 (格式 P+字母+数字 A表示0)

&touchscreen {

        reg = <0x40>;

        compatible = "silead,gsl1680";

        firmware-name = "gsl1680-q8.fw";

       interrupt-parent = <&pio>;

      interrupts = <6 11 IRQ_TYPE_EDGE_FALLING>; //PG11

       power-gpios = <&pio 1 3 GPIO_ACTIVE_HIGH>; //PB03

        touchscreen-size-x = <800>;

        touchscreen-size-y = <480>;

         touchscreen-inverted-x;

        status = "okay";

};

声卡

&codec {

status = "okay";

};

主线的linux支持A13的gpu但是没有在dtsi里声明导致模块不加载

在sun5i-a13.dtsi里的soc结构里加入mali的描述

(照着a10和pocketchip内核相应参数改的)

mali: gpu@1c40000 {

compatible = "arm,mali-400", "arm,mali-utgard";

reg = <0x01c40000 0x10000>;

interrupts = <69>,

    <70>,

    <71>,

    <72>,

    <73>;

interrupt-names = "gp",

  "gpmmu",

  "pp0",

  "ppmmu0",

  "pmu";

clocks = <&ccu CLK_AHB_GPU>, <&ccu CLK_GPU>;

clock-names = "bus", "core";

resets = <&ccu RST_GPU>;

assigned-clocks = <&ccu CLK_GPU>;

assigned-clock-rates = <312000000>;

};

在保存后在内核源代码根目录输入(不要忘了设置环境变量)

make dtbs

即可得到设备树

之后在准备好SD卡部署另一个rootfs,用写入过uboot的sd卡新建一个ext4的分区(前面空出10mb左右的空间保护uboot)

再用相同办法解压archlinuxarm的rootfs到sd卡

复制好qemu-arm-static和前面步骤编译好的内核软件包后chroot进rootfs

直接 pacman -U 内核文件名(嫌麻烦的同学可以使用armbian生成内核 然后用aur里的debtap脚本转换成archlinuxarm软件包)

得到一个可以基本启动的archlinux

不要忘了替换在/boot/dtb开头的文件夹里的dtb

在boot文件夹下加入boot.scr

archlinuxarm提供了boot.scr但是没有放在支持列表里

https://mirrors.tuna.tsinghua.edu.cn/archlinuxarm/os/sunxi/boot/a13-olinuxino/

差不多就可以启动了🤓

但是Archlinux 逼近主线 忠于上游无修改的包哲学对于我等小白配置好所有东西还是太吃力 搞了几天后搞不动声卡果断弃坑(armbian的alsa跑的通估计魔改过)

 弃坑主要的一点是无法判断是设备树的问题还是rootfs的问题😡


Armbian (相对坑少,但是包旧)

        还好各种派的轮子层出不穷,一群大神搞出了自动化deb系rootfs构建脚本,内核配置uboot编译一条龙服务,最终得到的img可以直接像树莓派镜像一样烧写(etcher),(但预定内核配置有坑 uboot卡在Starting Kernel,还有dts的修改要参照上文 mesa版本太低也是一个坑) 推荐在配置时使用官方支持的ubuntu 18.04 其他的版本电源管理有问题upower识别不了电池。

加入设备描述文件和内核配置

把前面配置archlinuxarm的内核配置文件直接拖到./config/kernel/linux-sunxi-current.config 在内核编译的选单里直接选择current来启用这个配置。

设备文件在./config/boards里

.conf表示被官方支持的设备,直接出现在选单里。

.csc 表示社区支持的设备

.eof 表示结束支持的设备

.wip表示还没适配完的设备

照着一个配置文件改了一个

内容如下


# A13 single core 512Mb

BOARD_NAME="A13-Handsomepad"

BOARDFAMILY="sun5i"

BOOTCONFIG="q8_a13_tablet_defconfig"  #这里是uboot的配置文件,armbian是直接拉取uboot官方源码所以要严格按照defconfig提供的文件名来

KERNEL_TARGET="current,dev" #显示的内核版本编译选项


然后用root权限执行无脑编译脚本

sudo ./combile.sh

可能需要梯子来加快下载。。。

选择对应的设备 镜像文件就会出现在armbian目录下的output文件夹里。

烧到sd卡后用同样的办法替换/boot/dtb里的设备树,插到平板上就可以跑动一个基本的Ubuntu 18.04了!


lima驱动的试用

我的xorg.conf.d


Section "ServerFlags"

        Option  "AutoAddGPU" "off"

        Option "Debug" "dmabuf_capable"

EndSection

Section "OutputClass"

        Identifier "Lima"

        MatchDriver "sun4i-drm"

        Driver "modesetting"

        Option "PrimaryGPU" "true"

EndSection


我的mesa https://github.com/HandsomeYingyan/mainline-a13-q8

我的内核参数 sunxi_ve_mem_reserve=32 sunxi_g2d_mem_reserve=32 sunxi_fb_mem_reserve=64


××××××××××××××××××××××××××××××××××××××××××施工线

未完待续

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容