编译
这个版本使用了meson进行构建、ninja进行编译 ;
安装meson
编译
报错如上,查看meson.build文件,
我们的meson版本不正确, 查阅发现apt安装的版本过低;
安装meson
sudo apt-get install python3 python3-pip ninja-build
pip3 install --user meson
很奈斯
继续编译
发现报错,重启,又报错,
看来 之前没有安装py-3.7,重新安装
卸载自带的python3和python3.6导致重启后系统异常
用ubuntu18镜像重启,进livecd,编辑 /etc/resolv.conf,加入以下
nameserver 8.8.8.8
nameserver 8.8.4.4
切到系统盘 chroot xxxx
apt install ubuntu-desktop
又报permission denied,但是重新安装发现只需要0B,直接重启试试, 可以进桌面了,但是网络无法使用了,没有网络设备
ifconfig ens33 up
netplan命令无法使用,重新进livecd安装
permission denied这个问题请使用手动mount到mnt目录解决;
卸载ubuntu-desktop,然后重装,又报下面的错误了
但愿只是个日志的记录;重启netplan可以使用,ubuntu界面也正常,但是 还是没有网络设备,再进livecd,对比安装包,apt list --installed | grep network
加装这两项 ,无效,又出现 no read/write access to /var/lib/plan
对比正常的系统
少了一样东西, 再次对比
进livecd重装,好了,牛逼;
切换python版本
update-alternatives --display python //查看当前的系统配置
apt list --installed | grep python //查看所有安装的python版本
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1 //添加版本配置
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 2 //添加版本配置
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 3 //添加版本配置
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.7 4 //添加版本配置
sudo update-alternatives --config python //选择版本
选择版本的时候发现,自动选择的是priority高的
修改python3.6的优先级为300,让系统自带的python3.6在系统起来的时候可以正常被选择,
如果需要删除某个版本配置,使用以下命令
sudo update-alternatives --remove python /usr/bin/python2.7
好了,牛逼;
继续编译
meson build \
--prefix=vexpress/rootfs \
--cross-file=cross_file.txt \
-D amdgpu=false \
-D cairo-tests=false \
-D etnaviv=false \
-D exynos=true \
-D freedreno=false \
-D freedreno-kgsl=false \
-D install-test-programs=true \
-D intel=false \
-D libkms=false \
-D man-pages=false \
-D nouveau=false \
-D omap=false \
-D radeon=false \
-D tegra=false \
-D udev=false \
-D valgrind=false \
-D vc4=false \
-D vmwgfx=false
上面的命令报错,
删除libkms试试,又报错,
重新安装python3试试,已安装呀;重新安装python3-pip,再遍,没有报错了,
meson build \
libdrm 2.4.112 Intel : False User defined options Found ninja-1.8.2 at /usr/bin/ninja |
好的,牛逼;去看下输出目录,没有 ,还需要 执行ninja编译,meson只是构建;编译完成,再看下rootfs/lib,
modetest也是重新安装了,且库都是存在的,启动vexpress试一下,
没有设备?正常应该是检测到pl111,需要核对下代码,先找下这个报错,从报错的地方开始找,
跟踪报错
发现是上面的drm_server_info==NULL, 然后这个drmOpenByName又失败,需要找找vexpress有没有正确编译进pl111驱动,参考网上帖子,配置出现报错,
vexpress配置探究
查看发现pl111驱动也是这个名字,导致前面的驱动注册之后,这个注册不上;
查看makefile,发现很扯淡,
为了快速解决,先看下高版本的内核有没有变动,
4.19和4.20.17对比,好像没啥区别,
4.19和 5.19.17对比, 变了一堆,我giao~,
看看5.0.1的差距是不是小一些,
看来需要找个不冲突的版本了,参考网上别人用的,5.14.3,果然是干掉的,
就撅腚是你了~
使用vexpress_defconfig配置,不做任何修改,直接编译,然后发现又报错了,
pl111 deactived
查找代码,在这里,
需要确认什么地方吧mux_motherboard置为false了,同时需要 确认为什么被置为false,
但是继续看其他的日志,也没有问题,总之被加载了,但是modetest还是无法使用呀,/dev/dri下也没有设备,查看panel-arm-versatile.c并没有被编译,查看makefile,
想办法给他加上,
编译之后还是不行,查看这个文件的compatible,
发现只在versatile-ab.dts里面有配置,现在有两个选择,
1.把这个植到我们使用的dts中
2.找ab.dts用的是哪个defconfig
我们优先用2方式,省的多折腾,发现没有使用这个文件的,而且dts也不是在defconfig中指定的,dts文件夹中有很多dtb,这个是怎么来的?
尝试使用1但是无从下手,那么就使用versatile的配置编译试试吧,换上dtb,不行,启动都启动不了,看来versatile不是vexpress,这里需要更改 -M versatileab -m 256M,启动后kernel panic,后续再探究
在pl111_versatile.c中加上dump_stack,看下pl111_vexpress_clcd_init()的调用栈,没啥用,
注意到vexpress-v2p-ca9.dts中有clcd@10020000,对端port是dvi_bridge_in_ct,在vexpress-v2m.dtsi中找到dvi-transmitter@39,匹配的驱动是"sil,sii9022-tpi", "sil,sii9022",查找这两个是否有存在的,只有下面的驱动可以匹配,
这个文件被编译了,找下驱动日志,加上enter和finish
驱动是正常加载的,查看日志,有几处错误,
can't create /proc/sys/kernel/hotplug: nonexistent directory
Device Drivers > Generic Driver Options > Support for uevent helper 打开这个选项
mounting debugfs on /sys/kernel/debug failed: No such file or directory
Kernel hacking > Generic Kernel Debugging Instruments > Debug Filesystem 打开这个选项
Failed to initialize '/bus@4000000/motherboard/iofpga@7,00000000/timer@12000': -22
这个我也没有搜集到解决方法;
上述全部打开之后dri下还是没有设备,
换arm-linux-gnueabihf-工具链
换上hf的工具链编译,无法启动,替换的编译结果有:
linux-5.14.3
busybox---->rootfs.ext4
libdrm-2.4.112
启动出现kernel panic;还需要替换lib,
cp -par /usr/arm-linux-gnueabihf/lib/* ./lib
启动成功了,但是结果还是一样,看来需要跟踪下代码了,
跟踪drm设备注册接口
感觉之前定位的方向都不对,现在直接跟踪drm_dev_register()这个函数,发现pl111_drv.c中probe调用了,直接加打印,
发现这个地方压根没有打印,看下这个probe有没有进来,全加上,一步步跟,