OK335xS mac address hacking
/***********************************************************************
* OK335xS mac address hacking
* 声明:
* 在一般的嵌入式产品中,一般mac地址都是存在于CPU芯片中,不过有时候
* 我们也许会表示怀疑,因为我们可能更希望知道那些东西到底存在哪里,以一
* 种什么样的形式存在。
*
* 2016-2-1 深圳 南山平山村 曾剑锋
**********************************************************************/ MACHINE_START(AM335XEVM, "am335xevm")
/* Maintainer: Texas Instruments */
.atag_offset = 0x100,
.map_io = am335x_evm_map_io,
.init_early = am33xx_init_early,
.init_irq = ti81xx_init_irq,
.handle_irq = omap3_intc_handle_irq,
.timer = &omap3_am33xx_timer,
.init_machine = am335x_evm_init, -----------+
MACHINE_END |
|
MACHINE_START(AM335XIAEVM, "am335xiaevm") |
/* Maintainer: Texas Instruments */ |
.atag_offset = 0x100, |
.map_io = am335x_evm_map_io, |
.init_irq = ti81xx_init_irq, |
.init_early = am33xx_init_early, |
.timer = &omap3_am33xx_timer, |
.init_machine = am335x_evm_init, |
MACHINE_END |
|
|
static void __init am335x_evm_init(void) <----------+
{
am33xx_cpuidle_init();
am33xx_mux_init(board_mux);
omap_serial_init();
am335x_evm_i2c_init();
omap_sdrc_init(NULL, NULL);
usb_musb_init(&musb_board_data); omap_board_config = am335x_evm_config;
omap_board_config_size = ARRAY_SIZE(am335x_evm_config); _configure_device(EVM_SK, mfd_dev_cfg, PROFILE_NONE); daughter_brd_detected = false;
setup_zengjf(); ------------------------------+
|
/*create /proc/boardname to export info to userspace*/ |
proc_init(); |
|
/* Create an alias for icss clock */ |
if (clk_add_alias("pruss", NULL, "pruss_uart_gclk", NULL)) |
pr_warn("failed to create an alias: icss_uart_gclk --> pruss\n"); |
/* Create an alias for gfx/sgx clock */ |
if (clk_add_alias("sgx_ck", NULL, "gfx_fclk", NULL)) |
pr_warn("failed to create an alias: gfx_fclk --> sgx_ck\n"); |
} |
|
/* sbc-zengjf */ |
#define TLK110_PHY_ID 0x2000a211 |
#define LAN8710A_PHY_ID 0x7c0f1 |
char sbc_zengjf_phy1[] = {"0:00"}; |
char sbc_zengjf_phy2[] = {"0:01"}; |
|
static void setup_zengjf(void) <--------------------------------+
{
pr_info("The board is a sbc-zengjf.\n"); /*which doesn't have Write Protect pin LAN8710A_PHY_ID */
am335x_mmc[].gpio_wp = -EINVAL; int ret; _configure_device(EVM_SK, sbc_zengjf_dev_cfg, PROFILE_NONE); am33xx_cpsw_init(AM33XX_CPSW_MODE_MII, sbc_zengjf_phy1, sbc_zengjf_phy2); ---+
phy_register_fixup_for_uid(LAN8710A_PHY_ID , AM335X_EVM_PHY_MASK, |
am33xx_evm_tx_clk_dly_phy_fixup); |
} |
|
|
int am33xx_cpsw_init(enum am33xx_cpsw_mac_mode mode, unsigned char *phy_id0, <-+
unsigned char *phy_id1)
{
struct omap_hwmod *oh;
struct platform_device *pdev;
u32 mac_lo, mac_hi, gmii_sel;
u32 i; mac_lo = omap_ctrl_readl(TI81XX_CONTROL_MAC_ID0_LO);
mac_hi = omap_ctrl_readl(TI81XX_CONTROL_MAC_ID0_HI); ------------+
am33xx_cpsw_slaves[].mac_addr[] = mac_hi & 0xFF; |
am33xx_cpsw_slaves[].mac_addr[] = (mac_hi & 0xFF00) >> ; |
am33xx_cpsw_slaves[].mac_addr[] = (mac_hi & 0xFF0000) >> ; |
am33xx_cpsw_slaves[].mac_addr[] = (mac_hi & 0xFF000000) >> ; |
am33xx_cpsw_slaves[].mac_addr[] = mac_lo & 0xFF; |
am33xx_cpsw_slaves[].mac_addr[] = (mac_lo & 0xFF00) >> ; |
|
/* Read MACID0 from eeprom if eFuse MACID is invalid */ |
if (!is_valid_ether_addr(am33xx_cpsw_slaves[].mac_addr)) { |
for (i = ; i < ETH_ALEN; i++) |
am33xx_cpsw_slaves[].mac_addr[i] = am33xx_macid0[i]; |
} |
|
mac_lo = omap_ctrl_readl(TI81XX_CONTROL_MAC_ID1_LO); |
mac_hi = omap_ctrl_readl(TI81XX_CONTROL_MAC_ID1_HI); |
am33xx_cpsw_slaves[].mac_addr[] = mac_hi & 0xFF; |
am33xx_cpsw_slaves[].mac_addr[] = (mac_hi & 0xFF00) >> ; |
am33xx_cpsw_slaves[].mac_addr[] = (mac_hi & 0xFF0000) >> ; |
am33xx_cpsw_slaves[].mac_addr[] = (mac_hi & 0xFF000000) >> ; |
am33xx_cpsw_slaves[].mac_addr[] = mac_lo & 0xFF; |
am33xx_cpsw_slaves[].mac_addr[] = (mac_lo & 0xFF00) >> ; |
// Read MACID1 from eeprom if eFuse MACID is invalid |
if (!is_valid_ether_addr(am33xx_cpsw_slaves[].mac_addr)) { |
for (i = ; i < ETH_ALEN; i++) |
am33xx_cpsw_slaves[].mac_addr[i] = am33xx_macid1[i]; |
} |
|
|
switch (mode) { |
case AM33XX_CPSW_MODE_MII: |
gmii_sel = AM33XX_MII_MODE_EN; |
break; |
case AM33XX_CPSW_MODE_RMII: |
gmii_sel = AM33XX_RMII_MODE_EN; |
break; |
case AM33XX_CPSW_MODE_RGMII: |
gmii_sel = AM33XX_RGMII_MODE_EN; |
am33xx_cpsw_slaves[].phy_if = PHY_INTERFACE_MODE_RGMII; |
am33xx_cpsw_slaves[].phy_if = PHY_INTERFACE_MODE_RGMII; |
break; |
default: |
return -EINVAL; |
} |
|
writel(gmii_sel, AM33XX_CTRL_REGADDR(AM33XX_CONTROL_GMII_SEL_OFFSET)); |
|
if (phy_id0 != NULL) |
am33xx_cpsw_slaves[].phy_id = phy_id0; |
|
if (phy_id1 != NULL) |
am33xx_cpsw_slaves[].phy_id = phy_id1; |
|
memcpy(am33xx_cpsw_pdata.mac_addr, |
am33xx_cpsw_slaves[].mac_addr, ETH_ALEN); |
|
oh = omap_hwmod_lookup("mdio"); |
if (!oh) { |
pr_err("could not find cpgmac0 hwmod data\n"); |
return -ENODEV; |
} |
|
pdev = omap_device_build("davinci_mdio", , oh, &am33xx_cpsw_mdiopdata, |
sizeof(am33xx_cpsw_mdiopdata), NULL, , ); |
if (IS_ERR(pdev)) |
pr_err("could not build omap_device for cpsw\n"); |
|
oh = omap_hwmod_lookup("cpgmac0"); |
if (!oh) { |
pr_err("could not find cpgmac0 hwmod data\n"); |
return -ENODEV; |
} |
|
pdev = omap_device_build("cpsw", -, oh, &am33xx_cpsw_pdata, |
sizeof(am33xx_cpsw_pdata), NULL, , ); |
if (IS_ERR(pdev)) |
pr_err("could not build omap_device for cpsw\n"); |
|
return ; |
} |
|
/* TI81XX spefic control submodules */ |
#define TI81XX_CONTROL_DEVCONF 0x600 <--------------------*---+
| |
/* TI81XX CONTROL_DEVCONF register offsets */ | |
#define TI81XX_CONTROL_MAC_ID0_LO (TI81XX_CONTROL_DEVCONF + 0x030) | |
// TI81XX_CONTROL_MAC_ID0_HI = 0x634 ---------------------------*---*-+
#define TI81XX_CONTROL_MAC_ID0_HI (TI81XX_CONTROL_DEVCONF + 0x034) <---+ --+ |
|
/* |
* 1. 参考文档: |
* AM335x ARM® Cortex™-A8 Microprocessors (MPUs) Technical Reference Manual |
* |
* 2. 确认寄存器: |
* Table 9-10. CONTROL_MODULE REGISTERS |
* +--------+------------------+-------------+----------------+ |
* | Offset | Acronym Register | Description | Section | |
* +--------+------------------+-------------+----------------+ |
* | 634h | mac_id0_hi | | Section 9.3.26 | <------------+
* +--------+------------------+-------------+----------------+
*
* 3. 寄存器说明:
* 26.1.8.4.1 Device Initialization
* ......
* • Device uses EFUSE registers mac_id0_lo and mac_id0_hi in the control module for Ethernet MAC address of the device.
* ......
*/
OK335xS mac address hacking的更多相关文章
- I.MX6 Ethernet MAC (ENET) MAC Address hacking
/********************************************************************* * I.MX6 Ethernet MAC (ENET) M ...
- I.MX6 MAC Address hacking
/************************************************************************** * I.MX6 MAC Address hack ...
- Python Ethical Hacking - MAC Address & How to Change(3)
SIMPLE ALGORITHM Goal -> Check if MAC address was changed. Steps: 1. Execute and read ifconfig. ...
- Python Ethical Hacking - MAC Address & How to Change(2)
FUNCTIONS Set of instructions to carry out a task. Can take input, and return a result. Make the cod ...
- Python Ethical Hacking - MAC Address & How to Change(1)
MAC ADDRESS Media Access Control Permanent Physical Unique Assigned by manufacturer WHY CHANGE THE M ...
- OK335xS Qt network hacking
/********************************************************************** * OK335xS Qt network hacking ...
- OK335xS knob driver hacking
/************************************************************************* * OK335xS knob driver hac ...
- Ubuntu 下,修改 Mac address
ifconfig // check Mac address sudo ifconfig eth0 down sudo ifconfig eth0 hw ether xx:xx:xx:xx: ...
- 【小错误】Device eth2 has different MAC address than expected, ignoring.
今天在搭建rac配置IP的时候报错显示如下: Device eth2 has different MAC address than expected, ignoring.[FAILED] 百度了下,问 ...
随机推荐
- HDU 3974 Assign the task 暴力/线段树
题目链接: 题目 Assign the task Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- mysql之sql语句导入与导出讲解
导出SQL:mysqldump -u root -p 数据库名 [表名1 表名2] > 输出地址其中表名可选 本机测试实例:
- 消除SDK更新时的“https://dl-ssl.google.com refused”异常
原地址:http://blog.csdn.net/x605940745/article/details/17911115 消除SDK更新时的“https://dl-ssl.google.com ref ...
- 在 tornado 中异步无阻塞的执行耗时任务
在 tornado 中异步无阻塞的执行耗时任务 在 linux 上 tornado 是基于 epoll 的事件驱动框架,在网络事件上是无阻塞的.但是因为 tornado 自身是单线程的,所以如果我们在 ...
- Public, Private and Protect
public 意味着在其后声明的所有成员对所有的人都可以取. private 意味着除了该类型的创建者和类的内部成员函数之外,任何人都不能存取这些成员. protect 它与private基本相似,只 ...
- hdoj 2112 HDU Today
题目传送:http://acm.hdu.edu.cn/showproblem.php?pid=2112 分析:多了一个地方的条件,用map来映射地点编号,Dijkstra求解即可 //2013-10- ...
- abs(INT_MAX-(-1))
写一个程序,结果总是不对,check逻辑好几遍也没发现错误,无奈之下debug.发现一个有趣的现象abs(INT_MAX-(-1))返回值是-2147483648.于是看了下abs函数的代码实现. i ...
- Project Euler 98:Anagramic squares 重排平方数
Anagramic squares By replacing each of the letters in the word CARE with 1, 2, 9, and 6 respectively ...
- springmvc环境的搭建
最近应公司要求,用了2天时间学了springmvc的搭建,就简单总结一下: springmvc和struts2的比较,因为我是学过struts的,它们都是基于mvc模式而设计的web层框架 它们最大的 ...
- kmalloc/kfree,vmalloc/vfree函数用法和区别
http://blog.csdn.net/tigerjibo/article/details/6412881 kmalloc/kfree,vmalloc/vfree函数用法和区别 1.kmalloc ...