Page 1 of 1

Kernel Module Compile Problem

Posted: Fri 6. Oct 2023, 18:44
by OlliTheDarkness
Moin zusammen,

vieleicht kann mir hier ja ein schlaues Köpfchen weiterhelfen.

Ich benötige für einen Teil meiner Hardware die entsprechenden Kernel Module, da diese nicht integiert wurden (und wohl auch nie werden).

Bisher war das Compilen nie ein Problem und lief unter Kernel 5.x zuverlässig und erfolgreich.

Allerdings kommt durch eine Systemumstellung jetzt Kernel 6.x zum Einsatz.

Die entsprechenden Kernel Source / Headers sind installiert, allerdings knallt es mir beim Compilen immer nen Fehler rein :evil:

Fehler 1
/root/veth_drv/veth_hb.c: In function ‘veth_mac_set’:
/root/veth_drv/veth_hb.c:974:27: error: assignment of read-only location ‘*pstr_dev->dev_addr’
974 | pstr_dev->dev_addr[0] = puc_mac[0];
| ^
/root/veth_drv/veth_hb.c:975:27: error: assignment of read-only location ‘*(pstr_dev->dev_addr + 1)’
975 | pstr_dev->dev_addr[1] = puc_mac[1];
| ^
/root/veth_drv/veth_hb.c:976:27: error: assignment of read-only location ‘*(pstr_dev->dev_addr + 2)’
976 | pstr_dev->dev_addr[2] = puc_mac[2];
| ^
/root/veth_drv/veth_hb.c:977:27: error: assignment of read-only location ‘*(pstr_dev->dev_addr + 3)’
977 | pstr_dev->dev_addr[3] = puc_mac[3];
| ^
/root/veth_drv/veth_hb.c:978:27: error: assignment of read-only location ‘*(pstr_dev->dev_addr + 4)’
978 | pstr_dev->dev_addr[4] = puc_mac[4];
| ^
/root/veth_drv/veth_hb.c:979:27: error: assignment of read-only location ‘*(pstr_dev->dev_addr + 5)’
979 | pstr_dev->dev_addr[5] = puc_mac[5];
| ^
Leider verrutschen die Zeichen, daher hier in Klar in Rot, was er bemängelt:

pstr_dev->dev_addr[0] = puc_mac[0];
usw.

Code: Select all

s32 veth_mac_set(struct net_device *pstr_dev, void *p_mac)
{
    struct sockaddr *str_addr = NULL;
    u8 *puc_mac = NULL;

    if (!pstr_dev || !p_mac) {
        return BSP_ERR_NULL_POINTER;
    }

    str_addr = (struct sockaddr *)p_mac;
    puc_mac = (u8 *)str_addr->sa_data;

    pstr_dev->dev_addr[0] = puc_mac[0];
    pstr_dev->dev_addr[1] = puc_mac[1];
    pstr_dev->dev_addr[2] = puc_mac[2];
    pstr_dev->dev_addr[3] = puc_mac[3];
    pstr_dev->dev_addr[4] = puc_mac[4];
    pstr_dev->dev_addr[5] = puc_mac[5];

    return BSP_OK;
}
Fehler 2
/root/veth_drv/veth_hb.c: In function ‘veth_netdev_func_init’:
/root/veth_drv/veth_hb.c:1119:22: error: assignment of read-only location ‘*dev->dev_addr’
1119 | dev->dev_addr[0] = 0x9c;
| ^
/root/veth_drv/veth_hb.c:1120:22: error: assignment of read-only location ‘*(dev->dev_addr + 1)’
1120 | dev->dev_addr[1] = 0x7d;
| ^
/root/veth_drv/veth_hb.c:1121:22: error: assignment of read-only location ‘*(dev->dev_addr + 2)’
1121 | dev->dev_addr[2] = 0xa3;
| ^
/root/veth_drv/veth_hb.c:1122:22: error: assignment of read-only location ‘*(dev->dev_addr + 3)’
1122 | dev->dev_addr[3] = 0x28;
| ^
/root/veth_drv/veth_hb.c:1123:22: error: assignment of read-only location ‘*(dev->dev_addr + 4)’
1123 | dev->dev_addr[4] = 0x6f;
| ^
/root/veth_drv/veth_hb.c:1124:22: error: assignment of read-only location ‘*(dev->dev_addr + 5)’
1124 | dev->dev_addr[5] = 0xf9;
|
Leider verrutschen die Zeichen, daher hier in Klar in Rot, was er bemängelt:

dev->dev_addr[0] = 0x9c;
usw.

Code: Select all

void veth_netdev_func_init(struct net_device *dev)
{
    struct tag_pcie_comm_priv *priv = (struct tag_pcie_comm_priv *)netdev_priv(dev);

    VETH_LOG(DLOG_DEBUG, "eth init start\n");

    ether_setup(dev);

    dev->netdev_ops = &veth_ops;

    dev->watchdog_timeo = BSPVETH_NET_TIMEOUT;
    dev->mtu = BSPVETH_MTU_MAX;
    dev->flags = IFF_BROADCAST;
    dev->tx_queue_len = BSPVETH_MAX_QUE_DEEP;
    dev->ethtool_ops = &veth_ethtool_ops;

    (void)memset_s(priv, sizeof(struct tag_pcie_comm_priv), 0, sizeof(struct tag_pcie_comm_priv));
    (void)strncpy_s(priv->net_type, NET_TYPE_LEN, MODULE_NAME, NET_TYPE_LEN - 1);

    /* 9C:7D:A3:28:6F:F9 */
    dev->dev_addr[0] = 0x9c;
    dev->dev_addr[1] = 0x7d;
    dev->dev_addr[2] = 0xa3;
    dev->dev_addr[3] = 0x28;
    dev->dev_addr[4] = 0x6f;
    dev->dev_addr[5] = 0xf9;

    VETH_LOG(DLOG_DEBUG, "set veth MAC addr OK\n");
}
Ich checke nicht so ganz was sein scheiß Problem ist.

Es wurde nie was verändert und wie gesagt, mit Kernel 5.x klappt es super aber mit Kernel 6.x bekomm ich es einfach nicht hin :evil:

Wenn jemand nen Tipp für mich hat, bitte immer her damit.

Gruß von der dunklen Seite, Olli.

Re: Kernel Module Compile Problem

Posted: Fri 6. Oct 2023, 19:24
by Tobi
Fehlende 32bit Header?

Re: Kernel Module Compile Problem

Posted: Fri 6. Oct 2023, 19:31
by OlliTheDarkness
Tobi wrote: Fri 6. Oct 2023, 19:24 Fehlende 32bit Header?
Kann ich ausschließen. :(

Re: Kernel Module Compile Problem  [SOLVED]

Posted: Fri 6. Oct 2023, 21:19
by OlliTheDarkness
Das Problem ist gelöst.

Die Funktion welche Fehler 1 ausgelöst hat, wurde entfernt.

Die Funktion welche Fehler 2 ausgelöst hat wurde wie nachfolgend geändert, wodurch die erste Funktion überflüssig wurde.

Code: Select all

void veth_netdev_func_init(struct net_device *dev)
{
    struct tag_pcie_comm_priv *priv = (struct tag_pcie_comm_priv *)netdev_priv(dev);

    VETH_LOG(DLOG_DEBUG, "eth init start\n");

    ether_setup(dev);

    dev->netdev_ops = &veth_ops;

    dev->watchdog_timeo = BSPVETH_NET_TIMEOUT;
    dev->mtu = BSPVETH_MTU_MAX;
    dev->flags = IFF_BROADCAST;
    dev->tx_queue_len = BSPVETH_MAX_QUE_DEEP;
    dev->ethtool_ops = &veth_ethtool_ops;

    (void)memset_s(priv, sizeof(struct tag_pcie_comm_priv), 0, sizeof(struct tag_pcie_comm_priv));
    (void)strncpy_s(priv->net_type, NET_TYPE_LEN, MODULE_NAME, NET_TYPE_LEN - 1);

    // Register the MAC address during device initialization
    eth_hw_addr_random(dev);
    
    VETH_LOG(DLOG_DEBUG, "set veth MAC addr OK\n");
}