View previous topic :: View next topic |
Author |
Message |
jyoung Guru
Joined: 20 Mar 2007 Posts: 467
|
Posted: Tue Oct 25, 2022 4:47 pm Post subject: networking issue on a banana pi [SOLVED] |
|
|
I'm setting up gentoo on a banana pi, and it's not able to connect to the network. During boot, eth0 produces a large number of messages, but I think the most important are
eth0: soliciting a DHCP lease
dhcp_openbpf: eth0: Protocol not available
eth0: carrier lost
and then later
dhcp_openbpf: eth0: Protocol not available
eth0: probing for an IPv4LL address
arp_new: Protocol not available
I've search for the string "dhcp_openbpf: eth0: Protocol not available", and there is one forum thread
http://github.com/kobolabs/Kobo-Reader/issues/105
However, the thread ends with the folks basically giving up on the bug and switching from dhcpc to udhcpc. Interestingly, in both our cases ifconfig shows that the network interface is detected, although it's not assign an IP.
For my setup, I've used the stage3 arm v7 tarball to get me started, and then configured the kernel by hand. It seems like there might be something related to the kernel, however I've checked my kernel against this individual's kernel
http://wiki.gentoo.org/wiki/Banana_Pi_the_Gentoo_Way#Compile_the_Kernel
Grepping for BPF in their kernel shows only one item enabled, CONFIG_HAVE_BPF_JIT=y, which is also enabled in my kernel. dmesg doesn't show anything that looks like an error message related to "net" or "eth0". lscpi is also isn't much help in this specific case. It turns out that on the banana pi the "network card" is more integrated with the other systems, and doesn't go through a PCI interface.
I'd be grateful for any help on this mystery!
Last edited by jyoung on Sun Jan 01, 2023 6:39 pm; edited 1 time in total |
|
Back to top |
|
|
jyoung Guru
Joined: 20 Mar 2007 Posts: 467
|
Posted: Tue Oct 25, 2022 5:25 pm Post subject: |
|
|
I should add that I'm using openrc, and that net.eth0 is in default, but dhcpcd is not. My desktop (that I'm writing from now) is configured this way too.
When I add dhcpcd to default on the banana pi, the error messages I reported in my previous post are not present at boot. However, it's still not able to connect to the network. ifconfig still detects the device, but doesn't assign it an IP, and there are no apparent error messages relating to "net" or "eth0" in dmesg.
Also, the problem is almost certainly with the banana pi's configuration, and not with the network, since it's able to connect when I boot it from an ubuntu SD card instead of the gentoo SD card it's working from now. |
|
Back to top |
|
|
grknight Retired Dev
Joined: 20 Feb 2015 Posts: 1921
|
Posted: Tue Oct 25, 2022 5:37 pm Post subject: |
|
|
CONFIG_BPF should be set when CONFIG_NET is set.
CONFIG_NET is required to get any useful networking in the kernel flowing.
Code: | menuconfig NET
bool "Networking support"
select NLATTR
select GENERIC_NET_UTILS
select BPF |
|
|
Back to top |
|
|
jyoung Guru
Joined: 20 Mar 2007 Posts: 467
|
Posted: Tue Oct 25, 2022 5:46 pm Post subject: |
|
|
In my current kernel, CONFIG_BPF and CONFIG_NET are both set. |
|
Back to top |
|
|
NeddySeagoon Administrator
Joined: 05 Jul 2003 Posts: 54578 Location: 56N 3W
|
Posted: Tue Oct 25, 2022 8:25 pm Post subject: |
|
|
Moved from Kernel & Hardware to Gentoo on ARM.
Its one of these. _________________ Regards,
NeddySeagoon
Computer users fall into two groups:-
those that do backups
those that have never had a hard drive fail. |
|
Back to top |
|
|
pietinger Moderator
Joined: 17 Oct 2006 Posts: 5115 Location: Bavaria
|
Posted: Tue Oct 25, 2022 8:45 pm Post subject: Re: networking issue on a banana pi |
|
|
jyoung wrote: | [...] and then configured the kernel by hand. [...] |
Have you used "make menuconfig" for this ? If you have edited your .config please read this:
https://wiki.gentoo.org/wiki/User:Pietinger/Tutorials/Manual_kernel_configuration#Never_edit_.config
I have a minimal kernel configuration (only IPv4) and I can tell you, it is very difficult to make networking not to work. I assume you have enabled your needed network driver.
Then you need only in networking section:
Code: | [*] Networking support ---> |
If you look into the help of this item, you will find:
Quote: | Selects: NLATTR [=y] && GENERIC_NET_UTILS [=y] && BPF [=y] |
So, these options will be enabled automatically.
The only options you need in this menu are:
Code: | Networking options --->
[*] Packet socket
-*- Unix domain sockets
[*] TCP/IP networking |
And none of them enables more options.
Of course for IPv6 you will need:
Code: | [ ] The IPv6 protocol ---- |
and for netfilter (firewall or NAT) you need:
Code: | [*] Network packet filtering framework (Netfilter) ---> |
Thats all |
|
Back to top |
|
|
jyoung Guru
Joined: 20 Mar 2007 Posts: 467
|
Posted: Tue Oct 25, 2022 10:35 pm Post subject: |
|
|
pietinger, I just checked, and those options are enabled in the kernel, aside from Netfilter. The BPI is connected to my home router, so I don't think that's the issue. I have not enabled all of the suboptions, for example IPv6 has quite a lot, although most seem related to router functionality, and this isn't a router.
And, yes, I'm configuring through menuconfig, so not totally "by hand". |
|
Back to top |
|
|
pietinger Moderator
Joined: 17 Oct 2006 Posts: 5115 Location: Bavaria
|
Posted: Tue Oct 25, 2022 11:44 pm Post subject: |
|
|
I would like to see the complete "dmesg" after you would set a static IP address (simply use "netifrc" as described in our AMD64 handbook) an do a reboot (so we see also kernel boot messages). This is to see if its a kernel problem or "only" dhcpcd.
(Please use wgetpaste for this) |
|
Back to top |
|
|
jyoung Guru
Joined: 20 Mar 2007 Posts: 467
|
Posted: Wed Oct 26, 2022 12:19 am Post subject: |
|
|
Okay, I've setup netirfc to request a static IP, rebooted, and here's the dmesg output
http://pastebin.com/PhhJ4V4P
Also, when I run ifconfig the inet field is now populated with the IP I requested |
|
Back to top |
|
|
jyoung Guru
Joined: 20 Mar 2007 Posts: 467
|
Posted: Wed Oct 26, 2022 3:28 am Post subject: |
|
|
With a static IP set and dhcpcd in the default runlevel, I'm able to ping other machines on the network, and the router. With a dynamic IP, I can't. I'm not able to ping an outside URL in either case.
This is the configuration I used in /etc/conf.d/net for the static IP
Code: | config_eth0="10.0.0.30 netmask 255.255.255.0 brd 10.0.0.255"
routes_eth0="default via 10.0.0.1" |
|
|
Back to top |
|
|
pietinger Moderator
Joined: 17 Oct 2006 Posts: 5115 Location: Bavaria
|
Posted: Wed Oct 26, 2022 8:21 am Post subject: |
|
|
jyoung, thanks for your dmesg. Now I am sure that it is not a problem with your kernel. As far as I understand the problem in the thread you already have found was ALSO a problem with: dhcpcd AND old kernel version.
This looks good:
Code: | [ 22.773587] eth0: device MAC address 02:17:05:00:a0:c8
[ 22.804514] sunxi_gmac: probed
[ 22.809950] eth0: PHY ID 001cc915 at 0 IRQ 0 (sunxi_gmac-0:00) active
[ 22.819098] eth0: PHY ID 001cc915 at 1 IRQ 0 (sunxi_gmac-0:01)
[ 27.256488] PHY: sunxi_gmac-0:00 - Link is Up - 100/Full |
... and here I cannot help (because I have all forgotten from that time)
Code: | [ 0.000000] Linux version 3.4.103+ (root@bananagen) (gcc version 4.8.3 (Gentoo 4.8.3 p1.1, pie-0.5.9) ) #4 SMP PREEMPT Fri Mar 6 04:58:06 MST 2015 |
Maybe you have only three choices:
1. Remove dhcpcd from runlevel and work with this static configuration, or
2. Try it with a newer kernel and/or with a newer gcc.
3. Use another dhcp client. |
|
Back to top |
|
|
jyoung Guru
Joined: 20 Mar 2007 Posts: 467
|
Posted: Wed Oct 26, 2022 8:37 am Post subject: |
|
|
That's really strange. I've been compiling and installing kernel 5.15.74, which is the only option in grub.cfg. But, uname -a confirms that the current kernel is 3.4.103. How is this possible? During the install, I followed the handbook on installing grub, although I think a next step might be to repeat it, just be be sure. But where did 3.4.103 come from? Interestingly, I've never been prompted with a grub bootup screen. |
|
Back to top |
|
|
jyoung Guru
Joined: 20 Mar 2007 Posts: 467
|
Posted: Wed Oct 26, 2022 6:31 pm Post subject: |
|
|
Okay, I see that I did something very silly. For a banana pi, there's a specialized bootloader called u-boot. It's spelled out pretty clearly in the how-to that I linked, but in a section that I skipped because I didn't do cross compiling. So, I think what I did with grub was totally ignored. Okay, let me mess with u-boot and report back. |
|
Back to top |
|
|
jyoung Guru
Joined: 20 Mar 2007 Posts: 467
|
Posted: Thu Oct 27, 2022 3:11 pm Post subject: |
|
|
Okay, I'm a little perplexed regarding uBoot. Based on what I've been able to find, the procedure is to compile uImage
Code: | make ARCH=arm UIMAGE_LOADADDR=0x8000 uImage |
And then copy the uImage to the boot folder
Code: | cp arch/amd/boot/uImage /boot/uImage |
After this operation, the BPI won't boot at all (no messages of any kind). One interesting question is the UIMAGE_LOADADDR= argument, which is the address where the kernel will be loaded into memory. This tutorial,
http://wiki.gentoo.org/wiki/Banana_Pi_the_Gentoo_Way#Compile_the_Kernel
which provided the working example that allowed me to boot in the first place, also provided this uEnv.txt file
Code: | bootargs=console=ttyS0,115200 console=tty0 sunxi_ve_mem_reserve=0 sunxi_g2d_mem_reserve=0 sunxi_no_mali_mem_reserve console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
aload_script=fatload mmc 0 0x43000000 script.bin;
aload_kernel=fatload mmc 0 0x48000000 uImage; bootm 0x48000000;
uenvcmd=run aload_script aload_kernel |
That seems to imply 0x48000000 as the correct value for UIMAGE_LOADADDR. Or, maybe it's not such much "correct" but more a case where they just need to match? Or maybe that's the kernel size (which is reported by make), and 0x43000000 is the entry point? I tried that too. I also found 0x8000 in this example
http://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842481/Build+kernel
But that wouldn't boot either. Any thoughts? |
|
Back to top |
|
|
jyoung Guru
Joined: 20 Mar 2007 Posts: 467
|
Posted: Thu Oct 27, 2022 7:23 pm Post subject: |
|
|
I've enabled the grub_platforms_uboot flag for grub, and I'm going to give grub another try. |
|
Back to top |
|
|
jyoung Guru
Joined: 20 Mar 2007 Posts: 467
|
Posted: Thu Oct 27, 2022 9:00 pm Post subject: |
|
|
Okay, I'm running
Code: | emerge --newuse grub |
with grub_platforms_uboot added to /etc/portage/package.use, and the emerge process seems to be running over and over again. I think I've seen it rebuild grub four times now. Any ideas? |
|
Back to top |
|
|
jyoung Guru
Joined: 20 Mar 2007 Posts: 467
|
Posted: Thu Oct 27, 2022 9:42 pm Post subject: |
|
|
Actually, I think I figured that one out. The BPI doesn't have an internal clock, and since it can't sync it's time with a network clock, it defaults back to 2010 at each reboot (why 2010?). Anyhow, this created a bunch of warnings during the build which I was ignoring (they were warnings, not errors). However, when I manually reset the time to the correct value, I was able to emerge grub. |
|
Back to top |
|
|
jyoung Guru
Joined: 20 Mar 2007 Posts: 467
|
Posted: Thu Oct 27, 2022 10:05 pm Post subject: |
|
|
Okay, the new grub is compiled and installed, but this experiment didn't work. Here's the usage:
Code: | grub-install /dev/<device> |
At this step, grub reports that it's installing for arm-uboot. Then
Code: | grub-mkconfig -o /boot/grub/grub.cfg |
Here, grub reports that it detected the kernel that I compiled. When I rebooted, it booted back into the old 3.4.103 kernel. I thought perhaps that there was still something left from the old bootloader on the card, so I flattened the first segement:
Code: | dd if=/dev/zero of=/dev/sdX bs=1k count=1023 seek=1 |
Then, I ran the grub-install and grub-mkconfig commands again, which reported the same success. Now, it won't boot. I can go back to the tutorial and burn the u-boot bootloader to the disk again, so I think the disk is recoverable. But I'm not sure how to get this system booting off the new kernel. |
|
Back to top |
|
|
jyoung Guru
Joined: 20 Mar 2007 Posts: 467
|
Posted: Fri Oct 28, 2022 2:32 am Post subject: |
|
|
There's a note at the top of the tutorial about u-boot, which sends me here
http://linux-sunxi.org/U-Boot#Compile_U-Boot
Following the directions there, I created a boot.cmd file
Code: | setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p2 rootwait panic=10
load mmc 0:1 0x43000000 sun7i-a20-bananapi-m1-plus.dtb || load mmc 0:1 0x43000000 boot/sun7i-a20-bananapi-m1-plus.dtb
load mmc 0:1 0x42000000 uImage-5.15.74 || load mmc 0:1 0x42000000 boot/uImage-5.15.74
bootm 0x42000000 - 0x42000000 |
used that to generate a boot.src file
Code: | mkimage -C none -A arm -T script -d boot.cmd boot.scr |
And then installed the bootloader (the tutorial had me do this too, so it's redundant)
Code: | dd if=u-boot-sunxi-with-spl.bin of=/dev/<device> bs=1024 seek=8 |
Note that in the boot.cmd file I've specified uImage-5.15.74 instead of just uImage, which would just be the old 3.4.103 kernel. uImage-5.15.74 I created from the kernel I configured with menuconfig. When I rebooted, the BPI rebooted successfully, but still on the 3.4.103 kernel. It really seems like those steps from the u-boot page didn't do anything, since the system just ignored uImage-5.15.74. What did I miss? |
|
Back to top |
|
|
jyoung Guru
Joined: 20 Mar 2007 Posts: 467
|
Posted: Wed Nov 02, 2022 2:47 pm Post subject: |
|
|
I've tried several variations on compiling a new uImage kernel and then copying it over to the location where the bootloader is expecting uImage. This looks like
Code: | make
make LOADADDR=0x48000000 uImage
cp -v arch/arm/boot/uImage/boot
|
The above commands would be executed from /usr/src/linux with /boot mounted. In all cases the BPI fails to boot, displaying no messages at all. I even wondered if it was booting but not displaying anything (like, the video driver didn't work or something), but I checked my routers and no machine connected.
I've tried several values for LOADADDR, and also specifying UIMAGE_LOADADDR instead. I admit that I don't fully understand how this is determined but 0x48000000 is explicitly referenced in the bootloader's uEnv.txt file. I've also recompiled using config files from BPI forms, after running make oldconfig.
I've also tried following this tutorial
http://wiki.lemaker.org/BananaPro/Pi:Building_u-boot,_script.bin_and_linux-kernel
Which is actually very thorough, although I can't get past installing the toolchain. Specifically, "make" requires arm-linux-gnueabihf-gcc. It seems like that's a part of the crossdev package, but after installing crossdev I'm kind of stuck on what to feed to crossdev. Ironically, I'm not cross compiling, so I don't think I really need it. Maybe I could just switch it to gcc in the Makefile?
I actually think that the setup as is is mostly there, since I can boot into gentoo, but there's some bit missing that's preventing a kernel update. I'm really lost. |
|
Back to top |
|
|
NeddySeagoon Administrator
Joined: 05 Jul 2003 Posts: 54578 Location: 56N 3W
|
Posted: Wed Nov 02, 2022 6:02 pm Post subject: |
|
|
jyoung.
crossdev builds cross toolchains for you.
There is an arm64 worked example of building a cross toolchain for a Raspberry Pi.
It goes on into building a kernel.
The tuple you need is the CHOST in the stage3 talball, which comes from your profile.
You need Code: | crossdev -t <CHOST> |
If you are not cross compiling none of this matters.
make should find the native gcc on the Banana pi, as provided by the stage3 tarball.
After you have built one kernel on the Banana pi, I'm pretty sure you will be cross compiling. :)
-- edit --
Your link says
Quote: | Note: all of the following instructions (and also in the sections 2, 3 and 4
following on from this page) have to be carried out on a Linux computer, not the Bananan Pro/Pi itself!! |
That means you are expected to cross compile. _________________ Regards,
NeddySeagoon
Computer users fall into two groups:-
those that do backups
those that have never had a hard drive fail.
Last edited by NeddySeagoon on Fri Nov 04, 2022 11:19 pm; edited 1 time in total |
|
Back to top |
|
|
pingtoo Veteran
Joined: 10 Sep 2021 Posts: 1248 Location: Richmond Hill, Canada
|
Posted: Wed Nov 02, 2022 6:21 pm Post subject: |
|
|
jyoung,
I don't have banana pi, I am raspberry pi 4b owner. I am no expert for u-boot, but I have a nanopi r4s which boot with uboot which can give me a little bit of reference.
I think may be a second pair of eyes can help catch something missing
If you don't mind, I like to reset to beginning,- what is your current plan?
- Using mainline uboot?
- Using sunxi uboot?
- Using sunxi kernel? (seems only at linux v3.x)
- Using mainline kernel?
- What did you plan for init?
From most of your post in this thread it seems to be you are able to boot in to a working system except the working system is not to your like, so you want to change it?
if I am right about you can boot into working system, lets collect some parameters of current system so we can later reference them. Code: | fdisk -x /dev/mmcblk0 |
current kernel command line Code: | dmesg|grep "Kernel command line:" |
I am still trying to figure out how to see uboot environment variables from linux. |
|
Back to top |
|
|
jyoung Guru
Joined: 20 Mar 2007 Posts: 467
|
Posted: Wed Nov 02, 2022 7:06 pm Post subject: |
|
|
NeddySeagoon, thanks for confirming that those instructions were for cross compiling. It does indeed take ~6 hours to compile a new kernel on the BPI! I've been letting it run overnight. Luckily, building the uImage is pretty fast if the kernel is otherwise compiled.
pingtoo, I'm currently booting off the uboot binary and uImage that came in a tarball from this tutorial
http://wiki.gentoo.org/wiki/Banana_Pi_the_Gentoo_Way#Compile_the_Kernel
under the link "Banana Pi Boot Files". That setup works in the sense that I can boot the BPI, although it's been impossible to update. As you pointed out, the sunxi kernel is quite old, and seems to be the source of the networking issue that started this thread. I'd really like to switch over to the mainline kernel so that I could update as needed.
The system that's currently installed is using openrc, which I'd like to use.
Here are the partitions. Note that it reads as /dev/sda because (at the moment) I'm booting the BPI off ubuntu and then chrooting into the gentoo SD through a USB port. This gives the BPI network access so I can use emerge, but most of the experiments I've done have had the BPI booted off the gentoo SD, which then appears as /dev/mmcblk0
Code: | Disk /dev/sda: 29.72 GiB, 31914983424 bytes, 62333952 sectors
Disk model: Storage Device
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x08e2b47e
Device Boot Start End Sectors Id Type Start-C/H/S End-C/H/S Attrs
/dev/sda1 2048 309247 307200 b W95 FAT32 1/0/1 150/63/32
/dev/sda2 309248 25475071 25165824 83 Linux 151/0/1 1023/63/32
/dev/sda3 25475072 27572223 2097152 83 Linux 1023/63/32 1023/63/32
/dev/sda4 27572224 62333951 34761728 83 Linux 1023/63/32 1023/63/32
|
And the kernel command line:
Code: | [ 0.000000] Kernel command line: console=ttyS0,115200 console=tty1 board=bpi-m1p root=/dev/mmcblk0p2 rootwait rootfstype=ext4 cgroup_enable=memory swapaccount=1 hdmi.audio=EDID:0 disp.screen0_output_mode=1920x1080p60 panic=10 consoleblank=0 enforcing=0 loglevel=8 |
|
|
Back to top |
|
|
pingtoo Veteran
Joined: 10 Sep 2021 Posts: 1248 Location: Richmond Hill, Canada
|
Posted: Wed Nov 02, 2022 8:42 pm Post subject: |
|
|
jyoung,
if /dev/sda1 is not already mounted somewhere please mount it read-only for example mount -r /dev/sda1 /mnt/boot
Do you have the uImage from Banana Pi the Gentoo Way/Downloads Banana Pi Boot Files?
if you do and you can examine it by Code: | mkimage -l <uImage> | Do the same for your custom build kernel uImage. This may give you idea on how the Load address setup.
What is in /mnt/boot/uEnv.txt? |
|
Back to top |
|
|
NeddySeagoon Administrator
Joined: 05 Jul 2003 Posts: 54578 Location: 56N 3W
|
Posted: Wed Nov 02, 2022 8:59 pm Post subject: |
|
|
jyoung,
Its been a while since I used uboot. Since the very early days of Pi 3 in 64 bit mode, when getting a serial console. was doing well. The USB chip driver didn't work yet, so that's all there was :)
The key line here
Code: | bootargs=console=ttyS0,115200 console=tty0 sunxi_ve_mem_reserve=0 sunxi_g2d_mem_reserve=0 sunxi_no_mali_mem_reserve console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
aload_script=fatload mmc 0 0x43000000 script.bin;
aload_kernel=fatload mmc 0 0x48000000 uImage; bootm 0x48000000;
uenvcmd=run aload_script aload_kernel |
Is Code: | aload_kernel=fatload mmc 0 0x48000000 uImage; bootm 0x48000000; | Thats load the kernel called uImage from a FAT partition on mmc0.
Call you kernel binary uImage or rewrite that file
There are a couple of buts here too.
Take care with the compression system used if any. Whatever in in use now, use that.
I don't see any mention of loading an initrd. That suggests that there is no initrd or its built into the kernel.
Booting without an initrd requires careful configuration of the kernel, since all the modules needed to read root must be built into the kernel.
If you haven't don that before, you need to practice on something faster than the BPI. _________________ Regards,
NeddySeagoon
Computer users fall into two groups:-
those that do backups
those that have never had a hard drive fail. |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|