这里会显示出您选择的修订版和当前版本之间的差别。
| 两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
|
jaysnote:kernel_compile [2018/11/15 20:25] jaylee |
jaysnote:kernel_compile [2021/06/22 23:14] (当前版本) |
||
|---|---|---|---|
| 行 1: | 行 1: | ||
| < | < | ||
| - | # GAC-350 | + | # Kernel Compile |
| ## 命令 | ## 命令 | ||
| 行 108: | 行 108: | ||
| 同时直接干掉无线网卡支持。 | 同时直接干掉无线网卡支持。 | ||
| - | ### 通过SID 生成mac地址。 | + | ### oui mac 和基于sid md5计算mac地址。 |
| + | * 接收用户传参,用以用户通过应用空间传递oui mac。 | ||
| ```c | ```c | ||
| - | //linux-3.10/ | + | //inux-3.10/ |
| - | extern int sunxi_get_soc_chipid(u8 | + | static char *user_mac |
| - | sunxi_get_soc_chipid(chipid); | + | static bool user_flag |
| - | buf[0] | + | module_param(user_mac, |
| - | | + | ``` |
| - | | + | * 如果用户没有传递参数,则通过 sid md5 随机mac; |
| - | | + | ```c |
| - | | + | //inux-3.10/ |
| - | | + | |
| - | | + | |
| - | buf[1], buf[2], buf[3], | + | |
| - | buf[4], buf[5]); | + | |
| - | asix_set_netdev_dev_addr(dev, buf); | + | # |
| + | //generate mac by hash cpuid | ||
| + | void hash_gen_mac(u8 *mac){ | ||
| + | |||
| + | u32 data[16] = {0}; | ||
| + | u32 hash[ 4] = {0}; | ||
| + | |||
| + | memset(hash, | ||
| + | memset(data, | ||
| + | |||
| + | //1. fill chipid to data | ||
| + | sunxi_get_soc_chipid((u8*)data); | ||
| + | // | ||
| + | |||
| + | printk(KERN_INFO " | ||
| + | |||
| + | |||
| + | //2. calc md5 | ||
| + | md5_transform(hash, | ||
| + | //hash[0] ^= hash[2]; | ||
| + | //hash[1] ^= hash[3]; | ||
| + | printk(KERN_INFO " | ||
| + | |||
| + | //3. fill mac | ||
| + | memset(mac, 0, ETH_ALEN); | ||
| + | |||
| + | mac[0] = 0x06; // | ||
| + | // | ||
| + | memcpy(& | ||
| + | } | ||
| ``` | ``` | ||
| + | * 业务逻辑 | ||
| ```c | ```c | ||
| // | // | ||
| - | pr_info("%s,%d: sun50i_sid_base | + | user_flag=true; |
| - | // | + | printk(KERN_INFO |
| - | // | + | if(user_mac!=NULL&& |
| - | // | + | for(i=0; |
| - | | + | buf[i]=0; |
| - | sunxi_soc_chipid[0] = readl(sun50i_sid_base ); | + | if(user_mac[3*i]> |
| - | sunxi_soc_chipid[1] = readl(sun50i_sid_base + 0x4); | + | buf[i]|=((user_mac[3*i]-' |
| - | | + | }else if(user_mac[3*i]> |
| - | | + | buf[i]|=((user_mac[3*i]-' |
| - | | + | }else if(user_mac[3*i]> |
| + | buf[i]|=((user_mac[3*i]-' | ||
| + | }else { | ||
| + | user_flag=false; | ||
| + | break; | ||
| + | } | ||
| + | if(user_mac[3*i+1]> | ||
| + | buf[i]|=(user_mac[3*i+1]-' | ||
| + | }else if(user_mac[3*i+1]> | ||
| + | buf[i]|=(user_mac[3*i+1]-' | ||
| + | }else if(user_mac[3*i+1]> | ||
| + | buf[i]|=(user_mac[3*i+1]-' | ||
| + | }else { | ||
| + | user_flag=false; | ||
| + | break; | ||
| + | } | ||
| + | |||
| + | | ||
| + | }else { | ||
| + | user_flag=false; | ||
| + | } | ||
| + | if(user_flag&& | ||
| + | printk(KERN_INFO | ||
| + | }else { | ||
| + | | ||
| + | | ||
| + | | ||
| + | } | ||
| ``` | ``` | ||