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
Fehler 1
Leider verrutschen die Zeichen, daher hier in Klar in Rot, was er bemängelt:/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];
| ^
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;
}
Leider verrutschen die Zeichen, daher hier in Klar in Rot, was er bemängelt:/root/veth_drv/veth_hb.c: In function ‘veth_netdev_func_init’:
/root/veth_drv/veth_hb.c22: error: assignment of read-only location ‘*dev->dev_addr’
1119 | dev->dev_addr[0] = 0x9c;
| ^
/root/veth_drv/veth_hb.c22: error: assignment of read-only location ‘*(dev->dev_addr + 1)’
1120 | dev->dev_addr[1] = 0x7d;
| ^
/root/veth_drv/veth_hb.c22: error: assignment of read-only location ‘*(dev->dev_addr + 2)’
1121 | dev->dev_addr[2] = 0xa3;
| ^
/root/veth_drv/veth_hb.c22: error: assignment of read-only location ‘*(dev->dev_addr + 3)’
1122 | dev->dev_addr[3] = 0x28;
| ^
/root/veth_drv/veth_hb.c22: error: assignment of read-only location ‘*(dev->dev_addr + 4)’
1123 | dev->dev_addr[4] = 0x6f;
| ^
/root/veth_drv/veth_hb.c22: error: assignment of read-only location ‘*(dev->dev_addr + 5)’
1124 | dev->dev_addr[5] = 0xf9;
|
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");
}
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
Wenn jemand nen Tipp für mich hat, bitte immer her damit.
Gruß von der dunklen Seite, Olli.