这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
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 { | ||
+ | | ||
+ | | ||
+ | | ||
+ | } | ||
``` | ``` | ||