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] 百度了下,问 ...
随机推荐
- SQL SERVER时间函数
本篇文章还是学习<程序员的SQL金典>内容的记录,此次将讲解的是SQL SERVER的时间函数. 本文只讲SQL SERVER支持的时间函数(其它数据库这里就不罗列了,想看更多的可以关注& ...
- 【POJ】【2096】Collecting Bugs
概率DP/数学期望 kuangbin总结中的第二题 大概题意:有n个子系统,s种bug,每次找出一个bug,这个bug属于第 i 个子系统的概率为1/n,是第 j 种bug的概率是1/s,问在每个子系 ...
- MySQL 5.7原生JSON格式支持
在MySQL与PostgreSQL的对比中,PG的JSON格式支持优势总是不断被拿来比较.其实早先MariaDB也有对非结构化的数据进行存储的方案,称为dynamic column,但是方案是通过BL ...
- 已收录的帝国cms文章被误删除了怎么办?
我们一直提倡网站要经常备份,但是有时也会遗忘,一不小心被谁删除了那就欲哭无泪了.就像ytkah刚弄了一个站,开了个权限比较高的后台帐号给别人用,居然把两三个栏目都删除了,想发狂啊.刚好又有段时间没备份 ...
- firefox无法安装未通过验证的扩展
firefox43版本无法安装未验证附加组件,利用以下方法: 1.进入firefox about:config页面中 2.搜索xpinstall.signatures.required,将值改为fa ...
- Candy
There are N children standing in a line. Each child is assigned a rating value. You are giving candi ...
- POJ2217 Secretary 后缀数组&&高度数组
学后缀数组后的一道裸题.先来讲讲收获,作为字符串初学者,后缀数组也是刚刚在学,所幸的是有一篇好的论文<后缀数组--处理字符串的有力工具>by 罗穗骞,里面非常详尽地介绍了有关后缀数组的概念 ...
- SPOJ MULTQ3 7299 Multiples of 3 (区间更新)
题目连接:http://www.spoj.com/problems/MULTQ3/ #include <iostream> #include <stdio.h> #includ ...
- SNAT
http://blog.chinaunix.net/uid-2628744-id-2454879.html
- Pycharm中的实用功能(网上看到的,感觉还不错)
实时比较 PyCharm 对一个文件里你做的改动保持实时的跟踪,通过在编辑器的左侧栏显示一个蓝色的标记.这一点非常方便,我之前一直是在Eclipse里面用命令“Compare against HEAD ...