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] 百度了下,问 ...
随机推荐
- 【BZOJ】【3093】【FDU校赛2012】A Famous Game
概率论 神题不会捉啊……挖个坑先 orz 贾教 & QuarterGeek /********************************************************* ...
- 剑指offer--面试题7
//两个栈实现一个队列 #include<stack> //STL #include<iostream> using namespace std; template<cl ...
- 汇编中Enter与Leave指令
Enter的作用相当==push ebp和mov ebp,esp 这后面两句大家很熟悉吧?函数开始一般都是这两句 Leave的作用相当==mov esp,ebp和pop ebp 而这后面这两句也很常见 ...
- HTTP请求报文与响应报文
http://docs.telerik.com/fiddler/KnowledgeBase/HTTP HTTP请求报文与响应报文 HTTP http://www.w3.org/Protocols/rf ...
- android 解析XML方式(二)
上一节中,我们使用DOM方式解析xml文档,该方式比较符合我们日常思维方式,容易上手,但是它直接把文档调入内存中,比较耗内存.在这里我们可以用另外一种方式解析xml,这个就是SAX方式. SAX即是: ...
- 【面试题002】java实现的单例模式,c++实现单例模式,实现禁止拷贝
[面试题002]java实现的单例模式,c++实现单例模式,实现禁止拷贝 一 c++实现单例模式 保证一个类,在一个程序当中只有一个对象,只有一个实例,这个对象要禁止拷贝,注意这里要区别于java. ...
- Feature Flag
know more from here: https://www.youtube.com/watch?v=WMRjj06R6jg&list=UUkQX1tChV7Z7l1LFF4L9j_g F ...
- POJ 1577 Falling Leaves (子母二叉树,给出叶子节点的删除序列,求前序遍历)
题意:给出一棵字母二叉树删除叶子节点的序列,按删除的顺序排列.让你输出该棵二叉树额前序遍历的序列.思路:先把一棵树的所有删除的叶子节点序列存储下来,然后从最后一行字符串开始建树即可,最后遍历输出. ...
- HDU 1829 A Bug's Life(种类并查集)
思路:见代码吧. #include <stdio.h> #include <string.h> #include <set> #include <vector ...
- .net web部署(IIS Express && Nancy Self-Hosting)
http://d.hatena.ne.jp/fkmt5/20140330/1396195246 [1]Nancy Web配置注意事项 添加url:netsh http add urlacl url=h ...