d3cker / gsoc-puhumod

Xiegu GSOC software mod a.k.a "путін хуй".
7 stars 2 forks source link

Move to a mainline kernel #6

Open ben-kuhn opened 1 year ago

ben-kuhn commented 1 year ago

This may not be possible depending on the patch set used on the stock kernel.

Looking at the loaded kernel modules, most drivers appear to be built in rather than built as loadable modules. My guess is to simplify the booting process.

This may resolve [https://github.com/d3cker/gsoc-puhumod/issues/2]

ben-kuhn commented 1 year ago

Well, CONFIG_IKCONFIG isn't enabled in the stock kernel so it looks like we are doing this the hard way...

d3cker commented 1 year ago

@ben-kuhn Yeah... I know... own kernel... It will be pain :) But let me summarize:

d3cker commented 1 year ago

Just a thought... How about previous releases? I think there is v1.1 still available. Maybe there is a support for .config? I wonder if there is some initial release kernel in the wild? I mean the one that was shipped with the first batch of the devices.

ben-kuhn commented 1 year ago

Good idea. I'll see if I can track down an older image.

I was messing with an Armbian image for the Cubieboard2 and it did boot on the GSOC but there was no display. It may be time to break out the screwdriver and see how the display is interfaced. I'm also not ruling out a bug as I've seen Armbian do similar with some Pine64 boards in recent builds. Fun stuff.

d3cker commented 1 year ago

I also put my hands on stock kernel to find out what is inside. mkimage -l shows a rather sparse result.

$ mkimage -l uImage 
Image Name:   Linux-5.4.24
Created:      Mon Dec 21 08:32:42 2020
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    5316344 Bytes = 5191.74 KiB = 5.07 MiB
Load Address: 42000000
Entry Point:  42000000

I stripped u-boot part to get clear zImage:

$ tail -c+65 < uImage > zImage
$ file zImage 
zImage: Linux kernel ARM boot executable zImage (little-endian)

I wanted to to use objdump to find .config section (if present) but no luck. No headers are found. So I did a try with binwalk:

$ binwalk zImage 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             Linux kernel ARM boot executable zImage (little-endian)
29536         0x7360          gzip compressed data, maximum compression, from Unix, last modified: 1970-01-01 00:00:00 (null date)

As noticed, there is a gZip data at 0x7360. So tried to extract that one. This time with some luck:

$ binwalk -e zImage
[...]
ls -l _zImage.extracted/7360 
-rw-rw-r-- 1 bartek bartek 14099496 gru  5 10:36 _zImage.extracted/7360

Now I have uncompressed kernel inside 7360 file and I'm not sure what to do next :) At least I can see some human readable strings right now:

$ strings _zImage.extracted/7360
[...]
earlycon
uart
snps,dw-apb-uart
uart
nvidia,tegra20-uart
ns16550a
ns16550a
ns16550
ns16550
uart
uart8250
random.trust_cpu
driver_async_probe=
deferred_probe_timeout=
[...]

binwalk also shows some interesting results:

$ binwalk _zImage.extracted/7360 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
1939537       0x1D9851        Certificate in DER format (x509 v3), header length: 4, sequence length: 774
2800569       0x2ABBB9        Certificate in DER format (x509 v3), header length: 4, sequence length: 8194
2956705       0x2D1DA1        Certificate in DER format (x509 v3), header length: 4, sequence length: 5452
6642909       0x655CDD        Certificate in DER format (x509 v3), header length: 4, sequence length: 592
7483577       0x7230B9        Certificate in DER format (x509 v3), header length: 4, sequence length: 773
7888121       0x785CF9        Certificate in DER format (x509 v3), header length: 4, sequence length: 5384
8386473       0x7FF7A9        Certificate in DER format (x509 v3), header length: 4, sequence length: 5380
9508260       0x9115A4        DES SP2, little endian
9509284       0x9119A4        DES SP1, little endian
9532160       0x917300        CRC32 polynomial table, little endian
9969692       0x98201C        AES S-Box
10033892      0x991AE4        Neighborly text, "Neighbor entry is now dead header for neighbor dump request"
10033967      0x991B2F        Neighborly text, "neighbor dump requestdump request"
10034021      0x991B65        Neighborly text, "neighbor dump requestp request"
10034072      0x991B98        Neighborly text, "neighbor dump request"
10034249      0x991C49        Neighborly text, "neighbor dump requestInvalid values in header for neighbor get request"
10034291      0x991C73        Neighborly text, "neighbor get requestrequest"
10034341      0x991CA5        Neighborly text, "neighbor get request request"
10034392      0x991CD8        Neighborly text, "neighbor get requestor get request"
10034449      0x991D11        Neighborly text, "neighbor get requestrequest"
10034499      0x991D43        Neighborly text, "neighbor get requestest"
10034545      0x991D71        Neighborly text, "neighbor get requestnot specified"
10034955      0x991F0B        Neighborly text, "neighbor table dump requestbor table dump request"
10035013      0x991F45        Neighborly text, "neighbor table dump requestghbor table dump request"
10035073      0x991F81        Neighborly text, "neighbor table dump requestnot specified"
10064414      0x99921E        Unix path: /var/run/rpcbind.sock
10078404      0x99C8C4        Certificate in DER format (x509 v3), header length: 4, sequence length: 676
10086376      0x99E7E8        LZO compressed data
10727360      0xA3AFC0        Unix path: /dev/vc/0
10767472      0xA44C70        Ubiquiti firmware header, third party, ~CRC32: 0x4C455445, version: "_DOWNGRADE"
10787372      0xA49A2C        xz compressed data
10856302      0xA5A76E        Unix path: /sys/kernel/debug/dri.
10872977      0xA5E891        Unix path: /sys/kernel/debug/dri.
10894056      0xA63AE8        Unix path: /lib/firmware/updates/5.4.24
10905168      0xA66650        Ubiquiti firmware header, third party, ~CRC32: 0x332E3130, version: "-"
11050415      0xA89DAF        Copyright string: "Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>"
11103764      0xA96E14        Unix path: /sys/firmware/devicetree/base
11104861      0xA9725D        Unix path: /sys/firmware/fdt': CRC check failed
11139441      0xA9F971        Neighborly text, "neighbor table overflow!solicit"
11194368      0xAAD000        ELF, 32-bit LSB shared object, ARM, version 1 (SYSV)
12933600      0xC559E0        ASCII cpio archive (SVR4 with no CRC), file name: "dev", file name length: "0x00000004", file size: "0x00000000"
12933716      0xC55A54        ASCII cpio archive (SVR4 with no CRC), file name: "dev/console", file name length: "0x0000000C", file size: "0x00000000"
12933840      0xC55AD0        ASCII cpio archive (SVR4 with no CRC), file name: "root", file name length: "0x00000005", file size: "0x00000000"
12933956      0xC55B44        ASCII cpio archive (SVR4 with no CRC), file name: "TRAILER!!!", file name length: "0x0000000B", file size: "0x00000000"
13618240      0xCFCC40        AES S-Box
13618496      0xCFCD40        AES Inverse S-Box

I checked 0x99E7E8 and 0xA49A2C but those were false positives. I hope this helps a little.

NeonFux commented 1 year ago

Some useful info and tools here https://github.com/orgs/cubieboard/repositories?type=all