Kernel Module Compile Problem  [SOLVED]

For topics beyond KeyHelp. / Für Themen jenseits von KeyHelp.
Post Reply
User avatar
OlliTheDarkness
Posts: 1854
Joined: Tue 14. Aug 2018, 16:41
Location: Essen (NRW)

Kernel Module Compile Problem

Post 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.
Mit freundlichen Grüßen
OlliTheDarkness

**************************************************************
Helden leben lange, Legenden sterben nie

:!: World Hack Organization :!:
**************************************************************
User avatar
Tobi
Community Moderator
Posts: 2831
Joined: Thu 5. Jan 2017, 13:24

Re: Kernel Module Compile Problem

Post by Tobi »

Fehlende 32bit Header?
Gruß,
Tobi


-----------------------------
wewoco.de
Das Forum für Reseller, Digital-Agenturen, Bildschirmarbeiter und Mäuseschubser
User avatar
OlliTheDarkness
Posts: 1854
Joined: Tue 14. Aug 2018, 16:41
Location: Essen (NRW)

Re: Kernel Module Compile Problem

Post by OlliTheDarkness »

Tobi wrote: Fri 6. Oct 2023, 19:24 Fehlende 32bit Header?
Kann ich ausschließen. :(
Mit freundlichen Grüßen
OlliTheDarkness

**************************************************************
Helden leben lange, Legenden sterben nie

:!: World Hack Organization :!:
**************************************************************
User avatar
OlliTheDarkness
Posts: 1854
Joined: Tue 14. Aug 2018, 16:41
Location: Essen (NRW)

Re: Kernel Module Compile Problem  [SOLVED]

Post 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");
}

Mit freundlichen Grüßen
OlliTheDarkness

**************************************************************
Helden leben lange, Legenden sterben nie

:!: World Hack Organization :!:
**************************************************************
Post Reply