Blog - 小渔 / zh-CN 你若盛开,清风徐来 Thu, 29 Apr 2021 11:20:00 +0800 Thu, 29 Apr 2021 11:20:00 +0800 【记录】本站基于Handsome主题的一些修改配置记录 /index.php/archives/692/ /index.php/archives/692/ Thu, 29 Apr 2021 11:20:00 +0800 小渔 正文

参考来自看云

图标

按钮图标

[button color="info" icon="glyphicon glyphicon-tags" url="https:\/\/getbootstrap.com\/docs\/3.3\/components\/" type=""]图标库[/button]

原理

  1. type:选填,不填默认为矩形按钮。可选值: round --椭圆形按钮
  2. color: 选填,不填默认为success(绿色),可选值:
    light白色
    info蓝色
    dark深色
    success绿色
    black黑色
    warning黄色
    primary紫色
    danger红色
    icon选填,不填默认为文字按钮

示例

[button]矩形按钮文字[/button]
[button color="succees"]矩形按钮文字[/button]
[button type="round" color="success"]椭圆形按钮文字[/button]
[button color="success" icon="glyphicon glyphicon-asterisk"]图标按钮文字[/button]

[button]矩形按钮文字[/button]
[button color="succees"]矩形按钮文字[/button]
[button type="round" color="success"]椭圆形按钮文字[/button]
[button color="success" icon="glyphicon glyphicon-asterisk"]图标按钮文字[/button]

按钮链接

若原本为https://getbootstrap.com/docs/3.3/components/ 则需要修改为 https:\/\/getbootstrap.com\/docs\/3.3\/components\/ 方可正常跳转

导航栏图标

找到usr/themes/handsome/component/aside.php文件
大致在第191行左右的样子

<?php if (!$hideHomeItem): ?>
              <!--主页-->
              <li>
                <a href="<?php $this->options->rootUrl(); ?>/" class="auto">
                    <span class="nav-icon"><i data-feather="navigation"></i></span>
                    <span><?php _me("首页") ?></span>
                </a>
              </li>   

              <li>
                <a target="_blank" href="https://pan.yuos.top/#/s/yKuv" class="auto">
                    <span class="nav-icon"><i data-feather="folder"></i></span>
                    <span><?php _me("文件") ?></span>
                </a>
              </li>

              <li>
                <a target="_blank" href="https://mail.yuos.top/" class="auto">
                    <span class="nav-icon"><i data-feather="mail"></i></span>
                    <span><?php _me("邮箱") ?></span>
                </a>
              </li>

               <li>
                <a target="_blank" href="http://pan.alibada.ml:9983/" class="auto">
                    <span class="nav-icon"><i data-feather="cloud"></i></span>
                    <span><?php _me("网盘") ?></span>
                </a>
              </li>

                <li>
                <a target="_blank" href="http://photo.alibada.ml:9985/" class="auto">
                    <span class="nav-icon"><i data-feather="aperture"></i></span>
                    <span><?php _me("图床") ?></span>
                </a>
              </li>

              <li>
                <a target="_blank" href="https://space.bilibili.com/318787487/" class="auto">
                    <span class="nav-icon"><i data-feather="tv"></i></span>
                    <span><?php _me("bilibili") ?></span>
                </a>
              </li>

                <li>
                <a target="_blank" href="https://github.com/yuos-bit" class="auto">
                    <span class="nav-icon"><i data-feather="github"></i></span>
                    <span><?php _me("Github") ?></span>
                </a>
              </li>

                <li>
                <a target="_blank" href="https://jq.qq.com/?_wv=1027&k=5FBvVjw" class="auto">
                    <span class="nav-icon"><i data-feather="message-circle"></i></span>
                    <span><?php _me("QQ群") ?></span>
                </a>
              </li>
              <!-- /主页 -->

<i data-feather="mail">其中的"mail"既是图标名
[button color="info" icon="glyphicon glyphicon-tags" url="https:\/\/feathericons.com\/" type=""]导航栏图标库[/button]

评论表情图标

[button color="info" icon="glyphicon glyphicon-download-alt" url="https:\/\/wwi.lanzous.com\/i9uqhomdcyf" type=""]下载链接[/button]

使用方法

解压后会得到一个OwO.json文件及funny文件夹;
然后将funny文件夹放置在/usr/themes/handsome/usr/img/emotion目录下即可;
然后用我们解压得到的OwO.json文件替换掉/usr/themes/handsome/usr目录下的OwO.json文件即可;
示例

插件

crisp在线客服插件

示例
注册crisp账户并添加网站:[button color="info" icon="glyphicon glyphicon-globe" url="https:\/\/app.crisp.chat\/initiate\/signup\/" type=""]网址[/button]
注册完成后,点击 设置-网站设置-显示整合-HTML,复制代码添加至后台主题设置 自定义输出head 头部的HTML代码即可

邮件插件

使用说明

  1. [button color="info" icon="glyphicon
    glyphicon-circle-arrow-down"
    url="https:\/\/wwi.lanzous.com\/iXZivomdq8d" type=""]插件下载[/button]
  2. 将插件上传到 /usr/plugins/ 这个目录下
  3. 登陆后台,在“控制台”下拉菜单中进入“插件管理”
  4. 启用相关插件
  5. 设置smtp服务器地址、邮箱地址、密码等信息

评论获取用户信息插件

  1. [button color="info" icon="glyphicon glyphicon-circle-arrow-down" url="https:\/\/wwi.lanzous.com\/if5A8omdcxe" type=""]下载本插件[/button],解压到 usr/plugins/目录中
  2. 进入网站后台-控制台-插件-激活插件
  3. 此插件只适用于Handsome主题,未对其它主题优化!!!
  4. 修改 /usr/themes/handsome/component/comments.php文件,大概第72行处添加代码
    修改前:
    <span class="comment-author vcard">
    <b class="fn"><?php echo $author; ?></b><?php echo $Identity; ?>
    </span>

    修改后:

    <span class="comment-author vcard">
    <b class="fn"><?php echo $author; ?></b><?php echo $Identity; ?><?php UserAgent_Plugin::get_useragent($comments->agent,$comments->ip); ?>
    </span>

    Typecho开启CDN后,可能无法获取访客真实IP,只能取得CDN节点IP,为此可以在网站的根目录的 config.inc.php插入下面的代码:

    /** 防止CDN造成无法获取客户真实IP地址 */
    if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) 
    {
    $list = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);
    $_SERVER['REMOTE_ADDR'] = $list[0];
    }

    文本框打字机特效

    复制下方代码添加至后台主题设置 自定义输出body 尾部的HTML代码即可

    <!--文本框打字机特效-->
    <script type="text/javascript" src="https://www.mgxfd.club/usr/themes/handsome/assets/js/commentTyping.js"></script>

    复制弹框版权提醒

    首先将下方代码复制添加至后台主题设置 自定义输出head 头部的HTML代码

    <!--复制弹框JS-->
    <script src="https://www.mgxfd.club/layer/layer.js"></script>

    最后复制下方代码添加至后台主题设置 自定义 JavaScript即可

    <!--复制弹框-->
    document.body.oncopy = function() {layer.msg('复制成功,若要转载请务必保留本文链接!');};

    文章底部赞赏图标跳动

    将以下代码添加至后台主题设置 自定义CSS

    /*赞赏图标跳动*/
    .btn-pay {
    animation: star 0.5s ease-in-out infinite alternate;
    }
    @keyframes star {
    from {
        transform: scale(1);
    }
    to {
        transform: scale(1.1);
    }
    }
]]>
0 /index.php/archives/692/#comments /index.php/feed/archives/692/
【记录】关于Mac 使用Adobe全家桶时遇到“致命错误:xxx无法访问首选项文件夹...”的解决方案 /index.php/archives/679/ /index.php/archives/679/ Thu, 22 Apr 2021 21:53:00 +0800 小渔 正文

报错例子

[scode type="red"]

致命错误:Audition无法访问首选项文件夹。请确保当前用户具有首选项文件夹的读取/写入权限。
无法创建目录'/Users/yiyu.hxm/Library/Preferences/Adobe/Audition/14.0/Workspace/Saved Workspaces'.请检查父目录保护或访问权限。
[/scode]

修复脚本


[button color="info" icon="" url="" type="round"]修复脚本下载链接[/button]

使用方法

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
#安裝执行安装brew
brew install wget
#安装 wget




更新安装中

wget http://sh.alibada.ml:9986/Linux/LightroomCorrectPermission.zip
tar -xvf LightroomCorrectPermission.zip 
sudo chmod +x LightroomCorrectPermission.sh
./LightroomCorrectPermission.sh

完结

运行脚本后再打开就没问题了,完结,撒花!

]]>
0 /index.php/archives/679/#comments /index.php/feed/archives/679/
【记录】油猴脚本搭配Idm 实现百度网盘直链下载 /index.php/archives/671/ /index.php/archives/671/ Wed, 21 Apr 2021 19:56:00 +0800 小渔 正文

工具准备

下载地址

  1. 油猴脚本地址A
  2. 油猴脚本地址B
  3. 油猴脚本地址蓝奏云
  4. 百度网盘简易下载助手(直链下载复活版)脚本
  5. Internet Download Manager v6.38.21

脚本


    // ==UserScript==
    // @name         百度网盘简易下载助手(直链下载复活版)
    // @namespace    http://bd.softxm.cn/bd/
    // @version      0.5.3
    // @icon         data:image/jpeg;base64,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b3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjAtMDktMDhUMjM6MDI6NTErMDg6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjAtMDktMDlUMDA6Mjc6NTYrMDg6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDIwLTA5LTA5VDAwOjI3OjU2KzA4OjAwIiBkYzpmb3JtYXQ9ImltYWdlL2pwZWciIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NmJlYzRkZTMtODVhZC02NzQwLWE1OWUtOTk2Yjk0OTRjYTkxIiB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6ODAzOWVhMzMtMTQ3NS00YTRiLWIzODAtODNlNjdlNjY0NDEwIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6YjI4Yzk0ZGUtNjEyOS02YjRiLTg0YWMtYmUyN2Q3MjFhN2M3IiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpiMjhjOTRkZS02MTI5LTZiNGItODRhYy1iZTI3ZDcyMWE3YzciIHN0RXZ0OndoZW49IjIwMjAtMDktMDhUMjM6MDI6NTErMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6OTJiMTMwODYtNTAzZC03YjRmLTg5MDItMDk4MzVlYmE4MTU5IiBzdEV2dDp3aGVuPSIyMDIwLTA5LTA4VDIzOjUxOjM3KzA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjZmMWFmODcwLTk0YjktZjU0MS05NTU3LTRjY2VmZWE5ZGE1YyIgc3RFdnQ6d2hlbj0iMjAyMC0wOS0wOVQwMDoyNzo1NiswODowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjb252ZXJ0ZWQiIHN0RXZ0OnBhcmFtZXRlcnM9ImZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9qcGVnIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL2pwZWciLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjZiZWM0ZGUzLTg1YWQtNjc0MC1hNTllLTk5NmI5NDk0Y2E5MSIgc3RFdnQ6d2hlbj0iMjAyMC0wOS0wOVQwMDoyNzo1NiswODowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo2ZjFhZjg3MC05NGI5LWY1NDEtOTU1Ny00Y2NlZmVhOWRhNWMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6YjI4Yzk0ZGUtNjEyOS02YjRiLTg0YWMtYmUyN2Q3MjFhN2M3IiBzdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6YjI4Yzk0ZGUtNjEyOS02YjRiLTg0YWMtYmUyN2Q3MjFhN2M3Ii8+IDxwaG90b3Nob3A6VGV4dExheWVycz4gPHJkZjpCYWc+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0i6L2v5Lu25bCP5aa5IiBwaG90b3Nob3A6TGF5ZXJUZXh0PSLova/ku7blsI/lprkiLz4gPC9yZGY6QmFnPiA8L3Bob3Rvc2hvcDpUZXh0TGF5ZXJzPiA8cGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPiA8cmRmOkJhZz4gPHJkZjpsaT54bXAuZGlkOjBmYWUzMDg5LTcyYTItMTM0My05YTVjLTQyNmQ5NWEyNzY1MTwvcmRmOmxpPiA8cmRmOmxpPnhtcC5kaWQ6YmNmNTQ5ODItOTViNy01ZjQwLTg1NTQtY2FlMTE5ZjAyODVkPC9yZGY6bGk+IDwvcmRmOkJhZz4gPC9waG90b3Nob3A6RG9jdW1lbnRBbmNlc3RvcnM+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/eHBhY2tldCBlbmQ9InciPz7/7R8sUGhvdG9zaG9wIDMuMAA4QklNBCUAAAAAABAAAAAAAAAAAAAAAAAAAAAAOEJJTQQ6AAAAAADXAAAAEAAAAAEAAAAAAAtwcmludE91dHB1dAAAAAUAAAAAUHN0U2Jvb2wBAAAAAEludGVlbnVtAAAAAEludGUAAAAASW1nIAAAAA9wcmludFNpeHRlZW5CaXRib29sAAAAAAtwcmludGVyTmFtZVRFWFQAAAABAAAAAAAPcHJpbnRQcm9vZlNldHVwT2JqYwAAAAVoIWg3i75/bgAAAAAACnByb29mU2V0dXAAAAABAAAAAEJsdG5lbnVtAAAADGJ1aWx0aW5Qcm9vZgAAAAlwcm9vZkNNWUsAOEJJTQQ7AAAAAAItAAAAEAAAAAEAAAAAABJwcmludE91dHB1dE9wdGlvbnMAAAAXAAAAAENwdG5ib29sAAAAAABDbGJyYm9vbAAAAAAAUmdzTWJvb2wAAAAAAENybkNib29sAAAAAABDbnRDYm9vbAAAAAAATGJsc2Jvb2wAAAAAAE5ndHZib29sAAAAAABFbWxEYm9vbAAAAAAASW50cmJvb2wAAAAAAEJja2dPYmpjAAAAAQAAAAAAAFJHQkMAAAADAAAAAFJkICBkb3ViQG/gAAAAAAAAAAAAR3JuIGRvdWJAb+AAAAAAAAAAAABCbCAgZG91YkBv4AAAAAAAAAAAAEJyZFRVbnRGI1JsdAAAAAAAAAAAAAAAAEJsZCBVbnRGI1JsdAAAAAAAAAAAAAAAAFJzbHRVbnRGI1B4bEBSAAAAAAAAAAAACnZlY3RvckRhdGFib29sAQAAAABQZ1BzZW51bQAAAABQZ1BzAAAAAFBnUEMAAAAATGVmdFVudEYjUmx0AAAAAAAAAAAAAAAAVG9wIFVudEYjUmx0AAAAAAAAAAAAAAAAU2NsIFVudEYjUHJjQFkAAAAAAAAAAAAQY3JvcFdoZW5QcmludGluZ2Jvb2wAAAAADmNyb3BSZWN0Qm90dG9tbG9uZwAAAAAAAAAMY3JvcFJlY3RMZWZ0bG9uZwAAAAAAAAANY3JvcFJlY3RSaWdodGxvbmcAAAAAAAAAC2Nyb3BSZWN0VG9wbG9uZwAAAAAAOEJJTQPtAAAAAAAQAEgAAAABAAEASAAAAAEAAThCSU0EJgAAAAAADgAAAAAAAAAAAAA/gAAAOEJJTQQNAAAAAAAEAAAAWjhCSU0EGQAAAAAABAAAAB44QklNA/MAAAAAAAkAAAAAAAAAAAEAOEJJTScQAAAAAAAKAAEAAAAAAAAAAThCSU0D9QAAAAAASAAvZmYAAQBsZmYABgAAAAAAAQAvZmYAAQChmZoABgAAAAAAAQAyAAAAAQBaAAAABgAAAAAAAQA1AAAAAQAtAAAABgAAAAAAAThCSU0D+AAAAAAAcAAA/////////////////////////////wPoAAAAAP////////////////////////////8D6AAAAAD/////////////////////////////A+gAAAAA/////////////////////////////wPoAAA4QklNBAAAAAAAAAIAAzhCSU0EAgAAAAAACAAAAAAAAAAAOEJJTQQwAAAAAAAEAQEBAThCSU0ELQAAAAAABgABAAAADThCSU0ECAAAAAAAEAAAAAEAAAJAAAACQAAAAAA4QklNBB4AAAAAAAQAAAAAOEJJTQQaAAAAAAM9AAAABgAAAAAAAAAAAAABLAAAASwAAAAEj29O9lwPWbkAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAASwAAAEsAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAEAAAAAAABudWxsAAAAAgAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJjdDEAAAAEAAAAAFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAAEsAAAAAFJnaHRsb25nAAABLAAAAAZzbGljZXNWbExzAAAAAU9iamMAAAABAAAAAAAFc2xpY2UAAAASAAAAB3NsaWNlSURsb25nAAAAAAAAAAdncm91cElEbG9uZwAAAAAAAAAGb3JpZ2luZW51bQAAAAxFU2xpY2VPcmlnaW4AAAANYXV0b0dlbmVyYXRlZAAAAABUeXBlZW51bQAAAApFU2xpY2VUeXBlAAAAAEltZyAAAAAGYm91bmRzT2JqYwAAAAEAAAAAAABSY3QxAAAABAAAAABUb3AgbG9uZwAAAAAAAAAATGVmdGxvbmcAAAAAAAAAAEJ0b21sb25nAAABLAAAAABSZ2h0bG9uZwAAASwAAAADdXJsVEVYVAAAAAEAAAAAAABudWxsVEVYVAAAAAEAAAAAAABNc2dlVEVYVAAAAAEA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
    // @description  ▇▇▇▇▇ 20210418 满速接口仍可使用 ▇▇▇▇▇ 大概是目前唯一真正能用的直链下载助手了。免SVIP会员,免安装浏览器扩展,无视黑号。只要你有个Aria2或IDM,就可以使用你自己的帐号,享受极速下载的快感!
    // @author       软件小妹
    // @match        *://pan.baidu.com/*
    // @match        *://yun.baidu.com/*
    // @require      https://cdn.jsdelivr.net/npm/sweetalert@2.1.2/dist/sweetalert.min.js
    // @require      https://cdn.jsdelivr.net/npm/clipboard@2.0.6/dist/clipboard.min.js
    // @require      https://cdn.jsdelivr.net/npm/load-vaptcha-sdk@1.0.0/loadvaptcha.min.js
    // @run-at       document-idle
    // @grant        unsafeWindow
    // @grant        GM_addStyle
    // @grant        GM_getValue
    // @grant        GM_setValue
    // @grant        GM_deleteValue
    // @grant        GM_listValues
    // @grant        GM_openInTab
    // @grant        GM_notification
    // @grant        GM_xmlhttpRequest
    // @connect      localhost
    // @connect      yyxxs.cn
    // @connect      82.156.65.179
    // @connect      42.193.127.85
    // @connect      81.70.253.99
    // @connect      chenshao-1254788553.cos.ap-guangzhou.myqcloud.com
    // ==/UserScript==

    (function () {
        'use strict';

        let globalData = {
            scriptVersion: '0.5.3',
            // domain: 'http://42.193.127.85',
            domain: 'http://82.156.65.179',
            // domain: 'http://bd.yyxxs.cn',
            // domain: 'http://localhost:8080',
            param: '',
            downloading: 0,
            sending: 0,
            storageNamePrefix: 'softxm_storageName' // 本地储存名称前缀
        }

        let getAppSettingData = function () {
            return {
                scriptVersion: globalData.scriptVersion,
                param: globalData.param,
                storageNamePrefix: globalData.storageNamePrefix,
                getDownloadUrl: `${globalData.domain}/bd/getDownloadUrl2.php`,
                aria2DownloadUrl: `${globalData.domain}/bd/j/aria2DownloadUrl.html`, // Aria2软件下载地址
                aria2CourseUrl: `${globalData.domain}/bd/j/aria2CourseUrl.html`, // Aria2教程地址
                idmDownloadUrl: `${globalData.domain}/bd/j/idmCourseUrl.html`, // idm教程地址
                paramUrl: `https://chenshao-1254788553.cos.ap-guangzhou.myqcloud.com/params.data`,
                // paramUrl: `${globalData.domain}/bd/params.data`,
            }
        }

        let tmpData = {
            response: '',
            pwd: '',
            fs_id: '',
            token: '',
        }

        let configDefault = {
            savePath: 'D:\\__easyHelper__',
            jsonRpc: 'http://localhost:6800/jsonrpc',
            token: '',
            mine: '',
            code: '',
        };
        let getConfig = function () {
            // 上次使用 > 应用配置 > 代码默认
            return {
                savePath: getStorage.getLastUse('savePath') || getStorage.getAppConfig('savePath') || configDefault.savePath,
                jsonRpc: getStorage.getLastUse('jsonRpc') || getStorage.getAppConfig('jsonRpc') || configDefault.jsonRpc,
                token: getStorage.getLastUse('token') || getStorage.getAppConfig('token') || configDefault.token,
                mine: getStorage.getLastUse('mine') || getStorage.getAppConfig('mine') || configDefault.mine,
                code: getStorage.getLastUse('code') || configDefault.code,
            }
        }
        let getStorage = {
            getAppConfig: (key) => {
                return GM_getValue(getAppSettingData().storageNamePrefix + '_app_' + key) || '';
            },
            setAppConfig: (key, value) => {
                GM_setValue(getAppSettingData().storageNamePrefix + '_app_' + key, value || '');
            },
            getLastUse: (key) => {
                return GM_getValue(getAppSettingData().storageNamePrefix + '_last_' + key) || '';
            },
            setLastUse: (key, value) => {
                GM_setValue(getAppSettingData().storageNamePrefix + '_last_' + key, value || '');
            },
            getCommonValue: (key) => {
                return GM_getValue(getAppSettingData().storageNamePrefix + '_common_' + key) || '';
            },
            setCommonValue: (key, value) => {
                GM_setValue(getAppSettingData().storageNamePrefix + '_common_' + key, value || '');
            }
        }

        let btnDownload = {
            id: 'btnEasyHelper',
            text: '简易下载助手',
            title: '使用百度网盘简易下载助手进行下载',
            html: function () {
                return `
                    <span class="g-button-right">
                        <em class="icon icon-download" style="color:#ffffff" title="${this.text}"></em>
                        <span class="text" style="width: auto;">${this.text}</span>
                    </span>
                `
            }
        }

        let isHomePage = function () {
            let url = location.href;
            if (url.indexOf(".baidu.com/disk") > 0) {
                return true;
            } else {
                return false;
            }
        };

        let getSelectedFileList = function () {
            if (isHomePage()) {
                return getSelectedFileListHome();
            } else {
                return getSelectedFileListShare();
            }
        };
        let getSelectedFileListHome = function () {
            return require('system-core:context/context.js').instanceForSystem.list.getSelected();
        };
        let getSelectedFileListShare = function () {
            return require('system-core:context/context.js').instanceForSystem.list.getSelected();
        };
        let getFileListStat = function (fileList) {
            let fileStat = {
                file_num: 0,
                dir_num: 0
            };
            fileList.forEach(function (item) {
                if (item.isdir == 0) {
                    fileStat.file_num++;
                } else {
                    fileStat.dir_num++;
                }
            });
            return fileStat;
        };

        let initButtonEvent = function () {
            console.log('initButtonEvent初始化按钮事件');
            let yunData = getYunData();
            let isHome = isHomePage();
            if (yunData || isHome) {
                //暂时限制只能在管理页面中使用
                if (!isHome) {
                    showTipErrorSwal('必须先转存到自己网盘中,然后进入网盘进行下载!');
                    showShareSave();
                } else {
                    let fileList = getSelectedFileList();
                    let fileStat = getFileListStat(fileList);
                    if (fileList.length) {
                        if (fileStat.file_num > 1 || fileStat.dir_num > 0) {
                            showTipError('请选择一个文件进行下载(暂时不支持文件夹和多文件批量下载)')
                        }
                        if (fileStat.dir_num == 0 && fileStat.file_num == 1) {
                            showDownloadDialog(fileList, fileStat);
                        }
                    } else {
                        showTipErrorSwal('请选择一个文件进行下载');
                    }
                }
            } else {
                showLogin();
            }
        };

        let getYunData = function () {
            return unsafeWindow.yunData;
        };

        let showTipErrorSwal = function (err) {
            showSwal(err, {icon: 'error'});
        }
        let showTipError = function (err) {
            // showSwal(err,{icon: 'error'});
            alert(err);
        }
        let showTipInfo = function (info) {
            getJquery()("#dialogOpTips").show().html(info);
        }
        let showTipInfoAria = function (info) {
            getJquery()("#dialogOpTipsAria").show().html(info);
        }
        let showTipInfoIdm = function (info) {
            getJquery()("#dialogOpTipsIdm").show().html(info);
        }

        let showSwal = function (content, option) {
            divTips.innerHTML = content;
            option.content = divTips;
            if (!option.hasOwnProperty('button')) {
                option.button = '朕 知 道 了'
            }
            swal(option);
        }

        let showLogin = function () {
            getJquery()("[node-type='header-login-btn']").click();
        };
        let showShareSave = function () {
            getJquery()("[node-type='shareSave']").click();
        };
        let getJquery = function () {
            return require("base:widget/libs/jquerypacket.js");
        };

        //下载面板
        let showDownloadDialog = function (fileList, fileStat) {
            let theFile = fileList[0];
            console.log(theFile);
            let content = `
                <div id="downloadDialog">
                    <div id="dialogTop">
                        请点击下方按钮,开始下载 <span id="dialogFileName">${CutString(theFile.server_filename, 40)}</span>
                    </div>
                    <div id="dialogMiddle">
                        <div id="dialogLeft">
                            <div id="dialogLeftTips">
                                <div id="dialogLeftTips1">
                                    <strong>【方式1】</strong>IDM必须设置4线程及修改UA为 <strong>softxm;netdisk</strong>
                                    <div class="dialogLeftTipsLink">
                                        <a href="${getAppSettingData().idmDownloadUrl}" target="_blank">【IDM配置教程】</a>
                                    </div>
                                </div>
                                <div id="dialogLeftTips2">
                                    <strong>【方式2】</strong>必须使用小妹提供的Aria2才能高速下载
                                    <div class="dialogLeftTipsLink">
                                        <a href="${getAppSettingData().aria2DownloadUrl}" target="_blank">【点击下载】</a>&nbsp;&nbsp;&nbsp;&nbsp;<a href="${getAppSettingData().aria2CourseUrl}" target="_blank">【使用教程】</a>
                                    </div>
                                </div>
                            </div>
                            <div id="dialogQr">
                                <img id="dialogQrImg" src="https://chenshao-1254788553.cos.ap-guangzhou.myqcloud.com/images/qcode_softxm.gif" />
                            </div>
                        </div>
                        <div id="dialogRight">
                            <div id="dialogContent">
                                <input id="dialogBtnGetUrl" type="button" value="点击获取直链地址" class="btnInterface" />
                                <div id="dialogRemark">
                                    <!--
                                    ■ IDM下载速度<strong>6M/s</strong>左右,Aria2下载速度可以<strong>跑满带宽</strong>
                                    <br />
                                    -->
                                    ■ 下载速度<strong>因人而异</strong>,特别是共享网络(例如 校园网)
                                </div>
                                <div id="dialogOpTips"></div>
                                <div id="dialogVaptchaCode">
                                    <div id="dialogVaptchaCodeInput">
                                        <span id="dialogVaptchaCodeTips"></span>
                                        <input id="dialogCode" type="text" value="${getConfig().code}" />
                                    </div>
                                    <div id="dialogCodeRemark"></div>
                                </div>
                                <div id="dialogOpButtons">
                                    <input id="dialogBtnIdm" type="button" data-clipboard-text="" value="复制直链地址" class="btnInterface btnGreen" />
                                    <div id="dialogOpTipsIdm"></div>
                                    <input id="dialogBtnAria" type="button" value="发送至Aria2" class="btnInterface btnGreen" />
                                    <div id="dialogOpTipsAria"></div>
                                    <div id="dialogDivSavePath">
                                        保存路径:<input type="text" id="dialogTxtSavePath" value="${getConfig().savePath}" style="width: 170px;" />
                                        <span id="dialogAriaConfigClick">配置Aria2>></span>
                                        <div id="dialogAriaConfig">
                                            <input type="text" id="dialogAriaRPC" value="${getConfig().jsonRpc}" title="RPC地址" placeholder="RPC地址" style="width: 240px;" />
                                            <input type="text" id="dialogAriaToken" value="${getConfig().token}" title="token" placeholder="token" style="width: 77px;" />
                                            <br />
                                            <input type="checkbox" id="dialogAriaMine" value="checked" ${getConfig().mine}> 我使用自己的Aria2(如不懂,勿勾选)
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                    <div id="dialogClear"></div>
                    <div id="dialogBottom">众所周知的原因,脚本不可能常在,但作者常在,关注才能不迷路!!!</div>
                </div>
            `;
            showSwal(content, {
                button: '关 闭',
                closeOnClickOutside: false
            });

            //分享(入口 )
            let dialogBtnClick = function () {
                if (globalData.downloading === 1) {
                    return false;
                }
                //获取数据
                let bdstoken = unsafeWindow.locals.get('bdstoken');
                let pwd = getRndPwd(4);
                //+===================================
                //分享
                let details = {
                    method: 'POST',
                    responseType: 'json',
                    timeout: 10000, // 10秒超时
                    url: `/share/set?channel=chunlei&clienttype=0&app_id=250528&bdstoken=${bdstoken}&clienttype=0`,
                    data: `fid_list=[${theFile.fs_id}]&schannel=4&channel_list=[]&period=1&pwd=${pwd}`,
                    onloadstart: function () {
                        setShareStartState();
                    },
                    onload: function (res) {
                        console.log('分享文件时,百度返回:', res);
                        if (res.status === 200) {
                            switch (res.response.errno) {
                                //TODO:看看百度哪里有这些状态码解释
                                case 0: // 正常返回
                                    //验证
                                    vaptchaValidate(res.response, pwd, theFile.fs_id);
                                    getParams();
                                    break;
                                case 110:
                                    showTipInfo('发生错误!')
                                    showTipError('百度说:您今天分享太多了,24小时后再试吧!\n百度返回状态码:' + res.response.errno);
                                    setShareCompleteState();
                                    console.error(res);
                                    break;
                                case 115:
                                    showTipInfo('发生错误!')
                                    showTipError('百度说:该文件禁止分享!\n百度返回状态码:' + res.response.errno);
                                    setShareCompleteState();
                                    console.error(res);
                                    break;
                                case -6:
                                    showTipInfo('发生错误!')
                                    showTipError('请重新登录!\n百度返回状态码:' + res.response.errno);
                                    setShareCompleteState();
                                    console.error(res);
                                    break;
                                default: // 其它错误
                                    showTipInfo('发生错误!')
                                    showTipError('分享文件失败,导致无法获取直链下载地址,请重试!\n百度返回状态码:' + res.response.errno);
                                    setShareCompleteState();
                                    console.error(res);
                                    break;
                            }
                        } else {
                            showTipInfo('发生错误!')
                            showTipError('分享文件失败,导致无法获取直链下载地址!\n百度返回:' + res.responseText);
                            setShareCompleteState();
                            console.error(res);
                        }
                    },
                    ontimeout: (res) => {
                        showTipInfo('发生错误!')
                        showTipError('分享文件时连接百度接口超时,请重试!');
                        setShareCompleteState();
                        console.error(res);
                    },
                    onerror: (res) => {
                        showTipInfo('发生错误!')
                        showTipError('分享文件时发生错误,请重试!');
                        setShareCompleteState();
                        console.error(res);
                    }
                };
                try {
                    GM_xmlhttpRequest(details);
                } catch (error) {
                    showTipInfo('发生错误!')
                    showTipError('未知错误,请重试!');
                    setShareCompleteState();
                    console.error(error);
                }
            };

            //绑定按钮点击(点击获取直链地址)
            getJquery()("#dialogBtnGetUrl").click(function () {
                dialogBtnClick()
            });
            //点击配置Aria2
            getJquery()("#dialogAriaConfigClick").click(function () {
                showAriaConfig()
            });
            // 绑定点击复制事件
            copyUrl2Clipboard();
        };

        let getParams = function () {
            let details = {
                method: 'GET',
                timeout: 3000, // 3秒超时
                url: getAppSettingData().paramUrl + '?' + new Date().getTime(),
                onload: function (res) {
                    if (res.status === 200) {
                        // console.info(res.responseText);
                        setAppSettingData(res.responseText);
                    } else {
                        console.error(res);
                    }
                }
            };
            try {
                GM_xmlhttpRequest(details);
            } catch (error) {
                console.error(error);
            }
        }
        let setAppSettingData = function (paramData) {
            let j = getJquery().parseJSON(decodeURIComponent(paramData));
            if (j.err) {
                showTipErrorSwal(j.err);
            } else {
                getJquery().extend(globalData, j);
            }
        }

        let setShareStartState = function () {
            globalData.downloading = 1;
            showTipInfo('正在分享文件...')
            //保存用户输入的数据
            saveLastUseData();
            getJquery()('#dialogVaptchaCode').hide();
        }
        let setShareCompleteState = function () {
            globalData.downloading = 0;
            //保存用户输入的数据
            saveLastUseData();
            //重置vaptcha验证
            vaptchaAll.reset();
        }
        //调用函数:ariaDownload
        let setSendAriaStartState = function () {
            globalData.sending = 1;
            showTipInfoAria('正在发送至Aria2...');
            // getJquery()("#dialogBtnAria").val('正在发送至Aria2...');
            //保存用户输入的数据
            saveLastUseData();
        }
        let setSendAriaCompleteState = function (isSuccess) {
            globalData.sending = 0;
            if (isSuccess) {
                getJquery()("#dialogBtnAria").val('Aria2已经开始下载了');
                // showTipInfoAria('Aria2已经开始下载了');
            } else {
                getJquery()("#dialogBtnAria").val('发送至Aria2');
                // showTipInfoAria('Aria2已经开始下载了,切换过去看看吧~');
            }
            //保存用户输入的数据
            saveLastUseData();
        }

        let showAriaConfig = function () {
            let t = getJquery()("#dialogAriaConfig");
            if (t.css("display") == "none") {
                t.show();
            } else {
                t.hide();
            }
        }

        //分享成功后,开始手势验证
        let vaptchaValidate = function (response, pwd, fs_id) {
            //把response, pwd, fs_id存到公用变量,然后在pass事件中再取出
            setTmpData(response, pwd, fs_id, '');
            vaptchaAll.validate();
        }

        let setTmpData = function (response, pwd, fs_id, token) {
            tmpData.response = response;
            tmpData.pwd = pwd;
            tmpData.fs_id = fs_id;
            tmpData.token = token;
        }
        let getTmpData = function () {
            return tmpData;
        }
        //手势验证成功后,服务器获取直链地址
        let getDownloadUrl = function (response, pwd, fsid, token) {
            // console.log('分享成功后返回:', response);
            let shorturl = response.shorturl;
            let surl = shorturl.substring(shorturl.lastIndexOf('/') + 1, shorturl.length);
            let downloadUrl = `?version=${getAppSettingData().scriptVersion}&t=8888` + new Date().getTime();
            downloadUrl = getAppSettingData().getDownloadUrl + downloadUrl + getAppSettingData().param;
            //console.log('请求地址:' + downloadUrl);
            let params = new FormData();
            params.append('surl', surl);
            params.append('pwd', pwd);
            params.append('shareid', response.shareid);
            params.append('from', unsafeWindow.locals.get('uk'));
            params.append('fsidlist', `[${fsid}]`);
            params.append('start', getStorage.getCommonValue('start'));
            params.append('code', getJquery()('#dialogCode').val().trim());
            params.append('u', getJquery()('.user-name').html());
            params.append('fn', getSelectedFileList()[0].server_filename);
            params.append('token', token);
            //远程请求直链下载地址
            let details = {
                method: 'POST',
                responseType: 'json',
                timeout: 60000, // 60秒超时
                url: downloadUrl,
                // data: `surl=${surl}&pwd=${pwd}`, --php端收不到数据
                data: params,
                onloadstart: function () {
                    showTipInfo('人机验证通过~ 正在远程请求直链地址...')
                },
                onload: function (res) {
                    // console.log('请求参数:');
                    // params.forEach((value, key) => {
                    //      console.log("%s --> %s", key, value);
                    // })
                    console.log('远程请求直链地址,返回:', res);
                    if (res.status === 200) {
                        switch (res.response.errno) {
                            case 0: // 正常返回
                            case 103: // aria2 only
                                setShareCompleteState();
                                changeClickEvent(res.response);
                                saveStartState();
                                showQrTips(res.response);
                                break;
                            case 100: // 版本太旧
                                setShareCompleteState();
                                showTipErrorSwal(res.response.err);
                                break;
                            case 101: // vaptcha验证不成功
                                setShareCompleteState();
                                showTipInfo(res.response.err);
                                getJquery()('#dialogVaptchaCode').show();
                                showQrTips(res.response);
                                break;
                            case 102: // 慢速直链
                                setShareCompleteState();
                                showTipInfo(res.response.err);
                                break;
                            default: // 其它错误
                                showTipInfo('发生错误!')
                                showTipError(res.response.err);
                                setShareCompleteState();
                                break;
                        }
                    } else {
                        showTipInfo('发生错误!')
                        showTipError('请求直链下载地址失败!服务器返回:' + res.status);
                        setShareCompleteState();
                        console.error(res);
                    }
                },
                ontimeout: (res) => {
                    showTipInfo('发生错误!')
                    showTipError('请求直链下载地址时连接服务器接口超时,请重试!');
                    setShareCompleteState();
                    console.error(res);
                },
                onerror: (res) => {
                    showTipInfo('发生错误!')
                    showTipError('请求直链下载地址时发生错误,请重试!');
                    setShareCompleteState();
                    console.error(res);
                }
            };
            try {
                GM_xmlhttpRequest(details);
            } catch (error) {
                showTipInfo('发生错误!')
                showTipError('远程请求未知错误,请重试!');
                setShareCompleteState();
                console.error(error);
            }
        }

        //请求直链成功后,改变按钮点击事件
        let changeClickEvent = function (res) {
            //显示操作按钮
            getJquery()("#dialogOpButtons").show();
            if (res.errno == 0) {
                //正常返回:复制直链下载地址
                showTipInfo('获取直链成功,请在下方选择下载方式。');
                let url = res.aria2info.params[1][0];
                getJquery()("#dialogBtnIdm").attr("data-clipboard-text", url);
            } else {
                //Aria2 下载提示(隐藏idm下载按钮)
                showTipInfo(res.err);
                getJquery()("#dialogBtnIdm").hide();
                getJquery()("#dialogOpTipsIdm").hide();
            }
            //发送至Aria2
            let btnAria2 = getJquery()("#dialogBtnAria");
            btnAria2.unbind();
            btnAria2.click(function () {
                ariaDownload(res);
            });
        }
        //请求直链成功后,tips
        let showQrTips = function (res) {
            let qrImg = getJquery().trim(res.qrImg);
            let qrTips = getJquery().trim(res.qrTips);
            let codeTips = getJquery().trim(res.codeTips);
            let codeRemark = getJquery().trim(res.codeRemark);
            //console.log(qrImg, qrTips);
            if (qrImg.length > 0) {
                getJquery()("#dialogQrImg").attr('src', qrImg);
            }
            if (qrTips.length > 0) {
                getJquery()("#dialogBottom").html(qrTips);
            }
            if (codeTips.length > 0) {
                getJquery()("#dialogVaptchaCodeTips").html(codeTips).show();
            }
            if (codeRemark.length > 0) {
                getJquery()("#dialogCodeRemark").html(codeRemark).show();
            }
        }
        //请求直链成功后,xxxx
        let saveStartState = function (res) {
            let start = getStorage.getCommonValue('start');
            if (start) return;
            start = new Date().getTime();
            getStorage.setCommonValue('start', start);
        }
        //发送至aria2
        let ariaDownload = function (response) {
            let rpcDir = (getJquery()("#dialogTxtSavePath").val()).replace(/\\/g, '/');
            let rpcUrl = getJquery()("#dialogAriaRPC").val();
            let rpcToken = getJquery()("#dialogAriaToken").val();
            //使用自己的Aria2
            if (getConfig().mine == "checked") {
                if (response.errno == 0) {
                    //正常返回
                    delete response.aria2info.params[2].dir;
                    delete response.aria2info.params[2]['max-connection-per-server'];
                    delete response.aria2info.params[2].split;
                    delete response.aria2info.params[2]['piece-length'];
                } else {
                    //Aria2 only
                    delete response.aria2info.params[0][0].params[2].dir;
                    delete response.aria2info.params[0][0].params[2]['max-connection-per-server'];
                    delete response.aria2info.params[0][0].params[2].split;
                    delete response.aria2info.params[0][0].params[2]['piece-length'];
                }
            }
            let data = JSON.stringify(response.aria2info);
            data = data.replace('{{{rpcDir}}}', rpcDir).replace('{{{rpcToken}}}', rpcToken);
            //发送至aria2
            let details = {
                method: 'POST',
                responseType: 'json',
                timeout: 3000, // 3秒超时
                url: rpcUrl,
                data: data,
                onloadstart: function () {
                    setSendAriaStartState();
                },
                onload: function (res) {
                    console.log('发送至Aria2,返回:', res);
                    if (res.status === 200) {
                        if (res.response.result) {
                            // 正常返回
                            setSendAriaCompleteState(true);
                            showTipInfoAria('Aria2已经开始下载了,切换过去看看吧~');
                        } else {
                            // 其它错误
                            showTipInfoAria('发生错误!')
                            showTipError(res.response.message);
                            setSendAriaCompleteState(false);
                        }
                    } else {
                        showTipInfoAria('发生错误!')
                        showTipError('发送至Aria2失败!<br />服务器返回:' + res.responseText);
                        setSendAriaCompleteState(false);
                        console.error(res);
                    }
                },
                ontimeout: (res) => {
                    showTipInfoAria('发生错误!')
                    showTipError('连接到RPC服务器超时:请检查Aria2是否已连接,RPC配置是否正确!');
                    setSendAriaCompleteState(false);
                    console.error(res);
                },
                onerror: (res) => {
                    showTipInfoAria('发生错误!')
                    showTipError('发送至Aria2时发生错误,请重试!');
                    setSendAriaCompleteState(false);
                    console.error(res);
                }
            };
            try {
                GM_xmlhttpRequest(details);
            } catch (error) {
                showTipInfoAria('发生错误!')
                showTipError('发送至Aria2时发生未知错误,请重试!');
                setSendAriaCompleteState(false);
                console.error(error);
            }
        }
        //保存用户输入的数据(下次当默认值使用)
        let saveLastUseData = function () {
            getStorage.setLastUse('savePath', getJquery()("#dialogTxtSavePath").val());
            getStorage.setLastUse('jsonRpc', getJquery()("#dialogAriaRPC").val());
            getStorage.setLastUse('token', getJquery()("#dialogAriaToken").val());
            let mine = "";
            if (getJquery()("#dialogAriaMine").prop("checked") == true) {
                mine = "checked";
            }
            getStorage.setLastUse('mine', mine);
            getStorage.setLastUse('code', getJquery()("#dialogCode").val());
        }

        //复制直链下载地址
        let copyUrl2Clipboard = function () {
            let copyBtn = new ClipboardJS('#dialogBtnIdm')
            copyBtn.on("success", function (e) {
                // 复制成功(右键下载不好使,别再尝试了)
                showTipInfoIdm(`直链下载地址复制成功!`)
            });
        }

        //========================================= 公共函数
        function CutString(str, len, suffix) {
            if (!str) return "";
            if (len <= 0) return "";
            if (!suffix) suffix = "...";
            let templen = 0;
            for (let i = 0; i < str.length; i++) {
                if (str.charCodeAt(i) > 255) {
                    templen += 2;
                } else {
                    templen++
                }
                if (templen == len) {
                    return str.substring(0, i + 1) + suffix;
                } else if (templen > len) {
                    return str.substring(0, i) + suffix;
                }
            }
            return str;
        }

        function getRndPwd(len) {
            len = len || 4;
            let $chars = 'AEJPTZaejptz258';
            let maxPos = $chars.length;
            let pwd = '';
            for (let i = 0; i < len; i++) {
                pwd += $chars.charAt(Math.floor(Math.random() * maxPos));
            }
            return pwd;
        }

        // 延迟执行,否则找不到对应的按钮
        let sleep = function (time) {
            return new Promise((resolve) => setTimeout(resolve, time));
        };
        //========================================= css
        GM_addStyle(`
            .swal-modal {
                width: auto;
                min-width: 730px;
            }
            #downloadDialog{
                width: 730px;
                font-size:14px;
            }

            #dialogTop{
                margin: 20px 0;
            }
            #dialogFileName{
                color: blue;
                text-decoration:underline;
            }

            #dialogMiddle{}
            #dialogLeftTips{
                text-align: left;
                margin: 0 0 10px 0px;
                color: #4c4433;
                font-size: 13px;
            }
            #dialogLeftTips1,#dialogLeftTips2{
                margin-bottom: 5px;
                background: #f4c758;
                padding: 5px 0 5px 0;
                border-radius: 4px;
            }
            .dialogLeftTipsLink{
                text-align: center;
            }
            #dialogRight{
                width: 50%;
                float: left;
                margin-left: 15px;
            }
            #dialogContent input{
                vertical-align: middle;
            }
            #dialogRemark{
                text-align: left;
                font-size: 12px;
                margin-top: 5px;
            }
            #dialogVaptchaCode{
                display: none;
                text-align: left;
                margin-top: 5px;
                font-size: 12px;
                border: 2px solid #EDD;
            }
            #dialogVaptchaCodeInput{
                font-size: 14px;
            }
            #dialogCode{
                width: 50%;
            }
            #dialogCodeRemark{}
            #dialogQr{
                width: 265px;
                height: 265px;
                text-align: center;
            }
            #dialogQr img{
                width: 100%;
                margin-left: 27px;
            }
            #dialogClear{
                clear: both;
            }
            #dialogBottom{
                text-align: left;
                margin: 15px -20px 0 -20px;
                background: #f4c758;
                padding: 10px 0 10px 25px;
                color: #4c4433;
            }
            .btnInterface {
                width: 100%;
                height: 50px;
                background: #f00 !important;
                border-radius: 4px;
                transition: .3s;
                font-size: 25px !important;
                border: 0;
                color: #fff;
                cursor: pointer;
                text-decoration: none;
                font-family: Microsoft YaHei,SimHei,Tahoma;
                font-weight: 100;
                letter-spacing: 2px;
            }
            .btnGreen {
                background: #5cb85c !important;
            }

            #dialogDivSavePath{
                margin-top: 2px;
                text-align: left;
            }
            #dialogOpTips, #dialogOpTipsAria, #dialogOpTipsIdm{
                display: none;
                background: #f4c758;
                padding: 3px 14px;
                color: #4c4433;
                border-radius: 2px;
                font-weight: bold;
                text-align: left;
                margin-top: 2px;
            }
            #dialogOpButtons{
                display: none;
            }
            #dialogBtnIdm, #dialogBtnAria{
                margin-top: 15px;
            }
            #dialogAriaConfig{
                display: none;
                margin-top: 2px;
            }
            #dialogAriaConfigClick{
                color: #0098EA;
                text-decoration: underline;
                cursor:pointer;
                font-size: 12px;
                padding-left: 6px;
            }
            #dialogAriaConfig{
                font-size: 12px;
            }
            #dialogLeft{
                float: left;
                width: 47%;
            }
            .swal-footer{
                margin-top: 5px;
            }
        `);
        // ==================================== 逻辑代码开始
        console.log('脚本开始');

        const divTips = document.createElement('div');
        divTips.id = "divTips";

        let isLogin = document.querySelector('.login-main'); // 登录页面
        let vaptchaAll = null;
        if (!isLogin) {
            loadVaptchaSdk(function () {
                vaptcha({
                    vid: "5fc5252656181ea89f9ead2e", // 验证单元id
                    type: "invisible", // 显示类型 隐藏式
                    scene: 1, // 场景值 默认0
                    offline_server: "", //离线模式服务端地址,若尚未配置离线模式,请填写任意地址即可。
                }).then(function (vaptchaObj) {
                    vaptchaAll = vaptchaObj; //将VAPTCHA验证实例保存到全局变量中
                    console.log(vaptchaAll);

                    //验证通过时触发
                    vaptchaAll.listen("pass", function () {
                        // 验证成功进行后续操作
                        let token = vaptchaAll.getToken();
                        console.log(token);
                        let t = getTmpData();
                        getDownloadUrl(t.response, t.pwd, t.fs_id, token);
                    });

                    //关闭验证弹窗时触发
                    vaptchaAll.listen("close", function () {
                        showTipInfo('通过验证才可以取直链!点击上面按钮重新开始。');
                        setShareCompleteState()
                    });
                });
            });
        }

        let start = function () {
            let btnUpload = document.querySelector('[node-type=upload]'); // 管理页面:【上传】
            let btnQrCode = document.querySelector('[node-type=qrCode]'); // 分享页面:【保存到手机】
            if (!btnUpload && !btnQrCode) {
                console.log('找不到【上传】或【保存到手机】,1秒后将重新查找!');
                sleep(500).then(() => {
                    start();
                })
                return;
            }

            // 创建按钮 START
            let btn = document.createElement('a');
            btn.id = btnDownload.id;
            btn.title = btnDownload.title;
            btn.innerHTML = btnDownload.html();
            btn.style.cssText = 'margin: 0px;';
            btn.className = 'g-button g-button-red-large';
            btn.addEventListener('click', function (e) {
                initButtonEvent();
                e.preventDefault();
            });
            // 创建按钮 END

            // 添加按钮 START
            let parent = null;
            if (btnUpload) {
                parent = btnUpload.parentNode;
                parent.insertBefore(btn, btnUpload.nextElementSibling);
            } else if (btnQrCode) {
                parent = btnQrCode.parentNode;
                parent.insertBefore(btn, btnQrCode);
            }
            // 添加按钮 END

            // 修改搜索框宽度,否则在小显示器上,元素会重叠
            document.querySelectorAll('span').forEach((e) => {
                if (e.textContent.includes('搜索您的文件')) {
                    let divP = e.parentNode.parentNode.parentNode
                    divP.style.maxWidth = '200px';
                }
            });
            // 如果是登录页面,则不再执行以下代码,直接返回
            // if (isLogin) return;
        }

        sleep(500).then(() => {
            start();
        })
    })();
    //##################################

配置

安装油猴

网上随便百度下就知道谷歌怎么装插件了......

配置油猴





使用步骤

网页端操作

配置好后打开百度网盘网页版登录,会出现一个简易助手

选择中要下载的,然后点击简易下载助手

点击

点击获取直链地址



人机验证

复制直链地址到idm

idm端操作


手动下载时添加的用户代理地址为
[scode type="blue"]softxm;netdisk[/scode]
默认最大连接数为4,然后开始下载

[scode type="yellow"]以我这里100M的带宽为例[/scode]

[scode type="red"]免责声明:该记录仅用于研究学习使用,如有侵权请联系我删除[/scode]

]]>
1 /index.php/archives/671/#comments /index.php/feed/archives/671/
【记录】小米路由4A百兆版适配Padavan /index.php/archives/627/ /index.php/archives/627/ Sat, 17 Apr 2021 21:51:00 +0800 小渔 小米路由4AA百兆版适配Padavan

核心工程文件

  • MI-4A-100M.config
  • kernel-3.4.x.config
  • board.h
  • board.mk

其中
kernel-3.4.x.config board.h board.mk/opt/rt-n56u/trunk/configs/boards/MI-4A-100M/

MI-4A-100M.config/opt/rt-n56u/trunk/configs/templates/

源码

MI-4A-100M.config


### Target Vendor/Product (support only Ralink RT3883/MT7620/MT7621/MT7628)
CONFIG_VENDOR=Ralink
CONFIG_PRODUCT=MT7628

### Target ProductID (board select, max 12 symbols)
CONFIG_FIRMWARE_PRODUCT_ID="MI-4A-100M"

### Linux kernel and toolchain
CONFIG_FIRMWARE_INCLUDE_SFE=y

CONFIG_LINUXDIR=linux-3.4.x
CONFIG_TOOLCHAIN_DIR=/opt/rt-n56u/toolchain-mipsel

############################################################
### Linux kernel configuration
############################################################

### Enable MT7628 CPU sleep mode (downclock to 100MHz on idle)
#CONFIG_FIRMWARE_CPU_SLEEP=y

### 4.1 = MT7628 v4.1.0.0
CONFIG_FIRMWARE_WIFI2_DRIVER=4.1

### Kernel driver select for WiFi AP 5GHz
### 3.0 = MT7612E v3.0.4.0
CONFIG_FIRMWARE_WIFI5_DRIVER=3.0

### Enable IPv6 support
CONFIG_FIRMWARE_ENABLE_IPV6=y

### Enable USB support
CONFIG_FIRMWARE_ENABLE_USB=y

### Enable NTFS filesystem support via Paragon "ufsd" driver. ~0.4MB
CONFIG_FIRMWARE_ENABLE_UFSD=y

### Enable FAT/FAT32 filesystem support. ~0.1MB
CONFIG_FIRMWARE_ENABLE_FAT=y

### Enable exFAT (FAT/FAT32 too) filesystem support. ~0.12MB
CONFIG_FIRMWARE_ENABLE_EXFAT=y

### Enable EXT2 filesystem support. ~0.1MB
CONFIG_FIRMWARE_ENABLE_EXT2=y

### Enable EXT3 filesystem support. ~0.2MB
CONFIG_FIRMWARE_ENABLE_EXT3=y

### Enable EXT4 (EXT3/2 too) filesystem support. ~0.4MB
CONFIG_FIRMWARE_ENABLE_EXT4=y

### Enable XFS filesystem support. ~0.6MB
CONFIG_FIRMWARE_ENABLE_XFS=n

### Enable FUSE (filesystems in userspace) support. ~0.1MB
CONFIG_FIRMWARE_ENABLE_FUSE=y

### Enable swap files/partitions support. ~0.05MB
CONFIG_FIRMWARE_ENABLE_SWAP=n

### Include UVC camera modules. ~0.2MB
CONFIG_FIRMWARE_INCLUDE_UVC=y

### Include USB-HID modules. ~0.2MB
CONFIG_FIRMWARE_INCLUDE_HID=n

### Include USB-Serial modules (e.g. pl2303). ~0.03MB
CONFIG_FIRMWARE_INCLUDE_SERIAL=y

### Include USB-Audio modules ~0.46MB
CONFIG_FIRMWARE_INCLUDE_AUDIO=y

### Include network QoS scheduling modules. ~0.2MB
CONFIG_FIRMWARE_INCLUDE_QOS=n

### Include IMQ module for shapers (a bit of performance degradation). ~0.02MB
CONFIG_FIRMWARE_INCLUDE_IMQ=n

### Include IFB module for shapers. ~0.03MB
CONFIG_FIRMWARE_INCLUDE_IFB=n

### Include IPSet utility and kernel modules. ~0.4MB
CONFIG_FIRMWARE_INCLUDE_IPSET=y

### Include NFSv3 server. ~0.6MB
CONFIG_FIRMWARE_INCLUDE_NFSD=n

### Include NFSv3 client. ~0.5MB
CONFIG_FIRMWARE_INCLUDE_NFSC=n

### Include CIFS (SMB) client. ~0.2MB
CONFIG_FIRMWARE_INCLUDE_CIFS=n

############################################################
### Userspace configuration
############################################################

### Include WebUI international resources. Increased firmware size
CONFIG_FIRMWARE_INCLUDE_LANG_CN=y
#CONFIG_FIRMWARE_INCLUDE_LANG_BR=y
#CONFIG_FIRMWARE_INCLUDE_LANG_CZ=y
#CONFIG_FIRMWARE_INCLUDE_LANG_DA=y
#CONFIG_FIRMWARE_INCLUDE_LANG_DE=y
#CONFIG_FIRMWARE_INCLUDE_LANG_ES=y
#CONFIG_FIRMWARE_INCLUDE_LANG_FI=y
#CONFIG_FIRMWARE_INCLUDE_LANG_FR=y
#CONFIG_FIRMWARE_INCLUDE_LANG_NO=y
#CONFIG_FIRMWARE_INCLUDE_LANG_PL=y
#CONFIG_FIRMWARE_INCLUDE_LANG_RU=y
#CONFIG_FIRMWARE_INCLUDE_LANG_SV=y
#CONFIG_FIRMWARE_INCLUDE_LANG_UK=y

### Include NTFS-3G FUSE driver (instead of Paragon "ufsd"). ~0.4MB
CONFIG_FIRMWARE_INCLUDE_NTFS_3G=n

### Include LPR printer daemon. ~0.12MB
CONFIG_FIRMWARE_INCLUDE_LPRD=y

### Include USB-over-Ethernet printer daemon. ~0.05MB
CONFIG_FIRMWARE_INCLUDE_U2EC=y

### Include "tcpdump" utility. ~0.6MB
CONFIG_FIRMWARE_INCLUDE_TCPDUMP=y

### Include "hdparm" utility (allow set HDD spindown timeout and APM). ~0.1MB
CONFIG_FIRMWARE_INCLUDE_HDPARM=y

### Include "parted" utility (allow make GPT partitions). ~0.3MB
CONFIG_FIRMWARE_INCLUDE_PARTED=y

### Include SMB (and WINS) server. ~1.5MB
CONFIG_FIRMWARE_INCLUDE_SMBD=y

### using samba3.6 instead of samba3
CONFIG_FIRMWARE_INCLUDE_SMBD36=y

### Include WINS server only. ~0.4MB
CONFIG_FIRMWARE_INCLUDE_WINS=n

### Include syslog for SMB and WINS server. ~0.3MB
CONFIG_FIRMWARE_INCLUDE_SMBD_SYSLOG=n

### Include FTP server. ~0.2MB
CONFIG_FIRMWARE_INCLUDE_FTPD=y

### Include alternative L2TP control client RP-L2TP. ~0.1MB
CONFIG_FIRMWARE_INCLUDE_RPL2TP=n

### Include EAP-TTLS and EAP-PEAP authentication support. openssl ~1.2MB, wpa_supplicant +0.04MB
CONFIG_FIRMWARE_INCLUDE_EAP_PEAP=y

### Include HTTPS support for DDNS client. openssl ~1.2MB
CONFIG_FIRMWARE_INCLUDE_DDNS_SSL=n

### Include HTTPS support. openssl ~1.2MB
CONFIG_FIRMWARE_INCLUDE_HTTPS=n

### Include sftp-server. openssl ~1.2MB, sftp-server ~0.06MB
CONFIG_FIRMWARE_INCLUDE_SFTP=y

### Include dropbear SSH. ~0.3MB
CONFIG_FIRMWARE_INCLUDE_DROPBEAR=n

### Make the dropbear symmetrical ciphers and hashes faster. ~0.06MB
CONFIG_FIRMWARE_INCLUDE_DROPBEAR_FAST_CODE=n

### Include OpenSSH instead of dropbear. openssl ~1.2MB, openssh ~1.0MB
CONFIG_FIRMWARE_INCLUDE_OPENSSH=y

### Include OpenVPN. IPv6 required. openssl ~1.2MB, openvpn ~0.4MB
CONFIG_FIRMWARE_INCLUDE_OPENVPN=n

### Include Elliptic Curves (EC) to openssl library. ~0.1MB
CONFIG_FIRMWARE_INCLUDE_OPENSSL_EC=y

### Include "openssl" executable for generate certificates. ~0.4MB
CONFIG_FIRMWARE_INCLUDE_OPENSSL_EXE=n

### Include xUPNPd IPTV mediaserver. ~0.3MB
CONFIG_FIRMWARE_INCLUDE_XUPNPD=y

### Include Minidlna UPnP mediaserver. ~1.6MB
CONFIG_FIRMWARE_INCLUDE_MINIDLNA=n

### Include Firefly iTunes mediaserver. ~1.0MB
CONFIG_FIRMWARE_INCLUDE_FIREFLY=n

### Include ffmpeg 0.11.x instead of 0.6.x for Minidlna and Firefly. ~0.1MB
CONFIG_FIRMWARE_INCLUDE_FFMPEG_NEW=y

### Include Transmission torrent. openssl ~1.2MB, transmission ~1.5MB
CONFIG_FIRMWARE_INCLUDE_TRANSMISSION=n

### Include Transmission-Web-Control (advanced WebUI). ~0.8MB
CONFIG_FIRMWARE_INCLUDE_TRANSMISSION_WEB_CONTROL=n

### Include Aria2 download manager. openssl ~1.2MB, aria2 ~3.5MB
CONFIG_FIRMWARE_INCLUDE_ARIA=y

### Include Aria2 WEB control. ~0.7MB
CONFIG_FIRMWARE_INCLUDE_ARIA_WEB_CONTROL=y

CONFIG_FIRMWARE_INCLUDE_CURL=y

CONFIG_FIRMWARE_INCLUDE_SCUTCLIENT=y

CONFIG_FIRMWARE_INCLUDE_GDUT_DRCOM=n

CONFIG_FIRMWARE_INCLUDE_DOGCOM=y

CONFIG_FIRMWARE_INCLUDE_MINIEAP=y

CONFIG_FIRMWARE_INCLUDE_NJIT_CLIENT=y

CONFIG_FIRMWARE_INCLUDE_NAPT66=y

CONFIG_FIRMWARE_INCLUDE_SHADOWSOCKS=n

CONFIG_FIRMWARE_INCLUDE_SSSERVER=n

CONFIG_FIRMWARE_INCLUDE_SOFTETHERVPN_SERVER=n

CONFIG_FIRMWARE_INCLUDE_SOFTETHERVPN_CLIENT=n

CONFIG_FIRMWARE_INCLUDE_SOFTETHERVPN_CMD=n

CONFIG_FIRMWARE_INCLUDE_DNSFORWARDER=n

CONFIG_FIRMWARE_INCLUDE_VLMCSD=y

CONFIG_FIRMWARE_INCLUDE_TTYD=y

CONFIG_FIRMWARE_INCLUDE_LRZSZ=y

CONFIG_FIRMWARE_INCLUDE_HTOP=y

CONFIG_FIRMWARE_INCLUDE_NANO=y

CONFIG_FIRMWARE_INCLUDE_IPERF3=y

CONFIG_FIRMWARE_INCLUDE_DUMP1090=n

CONFIG_FIRMWARE_INCLUDE_RTL_SDR=n

CONFIG_FIRMWARE_INCLUDE_MTR=y

CONFIG_FIRMWARE_INCLUDE_SOCAT=y

CONFIG_FIRMWARE_INCLUDE_SRELAY=y

CONFIG_FIRMWARE_INCLUDE_MENTOHUST=y

CONFIG_FIRMWARE_INCLUDE_FRPC=n

CONFIG_FIRMWARE_INCLUDE_FRPS=n

CONFIG_FIRMWARE_INCLUDE_TUNSAFE=n

board.h

/* Xiaomi Mi 4A-100M (R4A-100M)*/

#define BOARD_PID       "MI-4A-100M"
#define BOARD_NAME      "MI-4A-100M"
#define BOARD_DESC      "Xiaomi Mi 4A-100M Wireless Router"
#define BOARD_VENDOR_NAME   "Beijing Xiaomi Technology Co., Ltd."
#define BOARD_VENDOR_URL    "http://www.mi.com/"
#define BOARD_MODEL_URL     "http://www.mi.com/miwifilite"
#define BOARD_BOOT_TIME     25
#define BOARD_FLASH_TIME    120
#define BOARD_GPIO_BTN_RESET    38
#undef  BOARD_GPIO_BTN_WPS
#undef  BOARD_GPIO_LED_ALL 
#define BOARD_GPIO_LED_WIFI 11
#define BOARD_GPIO_LED_POWER    24  /* 24: blue, 26: yellow, 29: red */
#undef  BOARD_GPIO_LED_LAN
#undef  BOARD_GPIO_LED_WAN
#define BOARD_HAS_5G_11AC   1
#define BOARD_NUM_ANT_5G_TX 2
#define BOARD_NUM_ANT_5G_RX 2
#define BOARD_NUM_ANT_2G_TX 2
#define BOARD_NUM_ANT_2G_RX 2
#define BOARD_NUM_ETH_LEDS  1
#define BOARD_NUM_ETH_EPHY  3
#define BOARD_HAS_EPHY_L1000    0
#define BOARD_HAS_EPHY_W1000    0

board.mk

##################################################################
# Board PID # Board Name       # PRODUCT # Note
##################################################################
# MI-4A-100M   # Xiaomi Mi 4A-100M   # MT7628  #
##################################################################

CFLAGS += -DBOARD_MI4A-100M
BOARD_NUM_USB_PORTS=0

kernel-3.4.x.config

#
# Automatically generated file; DO NOT EDIT.
# Linux/mips 3.4.113 Kernel Configuration
#
CONFIG_MIPS=y

#
# Machine selection
#
# CONFIG_RALINK_RT3052 is not set
# CONFIG_RALINK_RT3352 is not set
# CONFIG_RALINK_RT5350 is not set
# CONFIG_RALINK_RT3883 is not set
# CONFIG_RALINK_MT7620 is not set
# CONFIG_RALINK_MT7621 is not set
CONFIG_RALINK_MT7628=y
# CONFIG_MIPS_ALCHEMY is not set
# CONFIG_AR7 is not set
# CONFIG_ATH79 is not set
# CONFIG_BCM47XX is not set
# CONFIG_BCM63XX is not set
# CONFIG_MIPS_COBALT is not set
# CONFIG_MACH_DECSTATION is not set
# CONFIG_MACH_JAZZ is not set
# CONFIG_MACH_JZ4740 is not set
# CONFIG_LANTIQ is not set
# CONFIG_LASAT is not set
# CONFIG_MACH_LOONGSON is not set
# CONFIG_MIPS_MALTA is not set
# CONFIG_MIPS_SIM is not set
# CONFIG_NEC_MARKEINS is not set
# CONFIG_MACH_VR41XX is not set
# CONFIG_NXP_STB220 is not set
# CONFIG_NXP_STB225 is not set
# CONFIG_PNX8550_JBS is not set
# CONFIG_PNX8550_STB810 is not set
# CONFIG_PMC_MSP is not set
# CONFIG_PMC_YOSEMITE is not set
# CONFIG_POWERTV is not set
# CONFIG_SGI_IP22 is not set
# CONFIG_SGI_IP27 is not set
# CONFIG_SGI_IP28 is not set
# CONFIG_SGI_IP32 is not set
# CONFIG_SIBYTE_CRHINE is not set
# CONFIG_SIBYTE_CARMEL is not set
# CONFIG_SIBYTE_CRHONE is not set
# CONFIG_SIBYTE_RHONE is not set
# CONFIG_SIBYTE_SWARM is not set
# CONFIG_SIBYTE_LITTLESUR is not set
# CONFIG_SIBYTE_SENTOSA is not set
# CONFIG_SIBYTE_BIGSUR is not set
# CONFIG_SNI_RM is not set
# CONFIG_MACH_TX39XX is not set
# CONFIG_MACH_TX49XX is not set
# CONFIG_MIKROTIK_RB532 is not set
# CONFIG_WR_PPMC is not set
# CONFIG_CAVIUM_OCTEON_SIMULATOR is not set
# CONFIG_CAVIUM_OCTEON_REFERENCE_BOARD is not set
# CONFIG_NLM_XLR_BOARD is not set
# CONFIG_NLM_XLP_BOARD is not set
CONFIG_MT7628_ASIC=y
# CONFIG_RALINK_SYSTICK_COUNTER is not set
# CONFIG_RT2880_DRAM_16M is not set
# CONFIG_RT2880_DRAM_32M is not set
CONFIG_RT2880_DRAM_64M=y
# CONFIG_RT2880_DRAM_128M is not set
# CONFIG_RT2880_DRAM_256M is not set
CONFIG_RALINK_RAM_SIZE=64
CONFIG_RT2880_UART_57600=y
# CONFIG_RT2880_UART_115200 is not set
CONFIG_RALINK_UART_BRATE=57600
# CONFIG_RALINK_TIMER_DFS is not set
CONFIG_RALINK_TIMER_WDG=m
# CONFIG_RALINK_TIMER_WDG_RESET_OUTPUT is not set
CONFIG_RALINK_TIMER_WDG_REBOOT_DELAY=15
CONFIG_RALINK_TIMER_WDG_REFRESH_INTERVAL=4
# CONFIG_ALCHEMY_GPIO_INDIRECT is not set
CONFIG_RWSEM_GENERIC_SPINLOCK=y
# CONFIG_ARCH_HAS_ILOG2_U32 is not set
# CONFIG_ARCH_HAS_ILOG2_U64 is not set
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_GENERIC_CMOS_UPDATE=y
CONFIG_SCHED_OMIT_FRAME_POINTER=y
CONFIG_CEVT_R4K=y
CONFIG_CSRC_R4K=y
# CONFIG_ARCH_DMA_ADDR_T_64BIT is not set
CONFIG_DMA_NONCOHERENT=y
CONFIG_NEED_DMA_MAP_STATE=y
CONFIG_SYS_HAS_EARLY_PRINTK=y
# CONFIG_MIPS_MACHINE is not set
# CONFIG_NO_IOPORT is not set
CONFIG_CPU_LITTLE_ENDIAN=y
CONFIG_SYS_SUPPORTS_LITTLE_ENDIAN=y
CONFIG_IRQ_CPU=y
CONFIG_SWAP_IO_SPACE=y
CONFIG_BOOT_ELF32=y
CONFIG_MIPS_L1_CACHE_SHIFT=5

#
# CPU selection
#
# CONFIG_CPU_MIPS32_R1 is not set
CONFIG_CPU_MIPS32_R2=y
CONFIG_SYS_HAS_CPU_MIPS32_R1=y
CONFIG_SYS_HAS_CPU_MIPS32_R2=y
CONFIG_CPU_MIPS32=y
CONFIG_CPU_MIPSR2=y
CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y
CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y
CONFIG_HARDWARE_WATCHPOINTS=y

#
# Kernel type
#
CONFIG_32BIT=y
CONFIG_PAGE_SIZE_4KB=y
# CONFIG_PAGE_SIZE_16KB is not set
# CONFIG_PAGE_SIZE_64KB is not set
CONFIG_FORCE_MAX_ZONEORDER=11
CONFIG_CPU_HAS_PREFETCH=y
CONFIG_CPU_R4K_FPU=y
CONFIG_MIPS_MT_DISABLED=y
# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set
CONFIG_CPU_HAS_SYNC=y
CONFIG_CPU_SUPPORTS_HIGHMEM=y
CONFIG_ARCH_FLATMEM_ENABLE=y
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
CONFIG_HAVE_MEMBLOCK=y
CONFIG_HAVE_MEMBLOCK_NODE_MAP=y
CONFIG_ARCH_DISCARD_MEMBLOCK=y
CONFIG_PAGEFLAGS_EXTENDED=y
CONFIG_SPLIT_PTLOCK_CPUS=4
CONFIG_MOBILITY_GROUP_RAMLESS=y
CONFIG_PAGECACHE_RECLAIM=y
# CONFIG_COMPACTION is not set
# CONFIG_PHYS_ADDR_T_64BIT is not set
CONFIG_ZONE_DMA_FLAG=0
CONFIG_VIRT_TO_BUS=y
# CONFIG_KSM is not set
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
CONFIG_NEED_PER_CPU_KM=y
# CONFIG_CLEANCACHE is not set
CONFIG_TICK_ONESHOT=y
# CONFIG_NO_HZ is not set
CONFIG_HIGH_RES_TIMERS=y
CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
# CONFIG_HZ_48 is not set
# CONFIG_HZ_100 is not set
# CONFIG_HZ_128 is not set
CONFIG_HZ_250=y
# CONFIG_HZ_256 is not set
# CONFIG_HZ_1000 is not set
# CONFIG_HZ_1024 is not set
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
CONFIG_HZ=250
CONFIG_PREEMPT_NONE=y
# CONFIG_PREEMPT_VOLUNTARY is not set
# CONFIG_PREEMPT is not set
# CONFIG_KEXEC is not set
# CONFIG_SECCOMP is not set
# CONFIG_USE_OF is not set
CONFIG_LOCKDEP_SUPPORT=y
CONFIG_STACKTRACE_SUPPORT=y
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
CONFIG_HAVE_IRQ_WORK=y

#
# General setup
#
CONFIG_EXPERIMENTAL=y
CONFIG_BROKEN_ON_SMP=y
CONFIG_INIT_ENV_ARG_LIMIT=32
CONFIG_CROSS_COMPILE=""
CONFIG_LOCALVERSION=""
# CONFIG_LOCALVERSION_AUTO is not set
CONFIG_DEFAULT_HOSTNAME="(none)"
# CONFIG_SWAP is not set
CONFIG_SYSVIPC=y
CONFIG_SYSVIPC_SYSCTL=y
# CONFIG_POSIX_MQUEUE is not set
# CONFIG_BSD_PROCESS_ACCT is not set
# CONFIG_FHANDLE is not set
# CONFIG_TASKSTATS is not set
# CONFIG_AUDIT is not set
CONFIG_HAVE_GENERIC_HARDIRQS=y

#
# IRQ subsystem
#
CONFIG_GENERIC_HARDIRQS=y
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_GENERIC_IRQ_SHOW=y

#
# RCU Subsystem
#
CONFIG_TINY_RCU=y
# CONFIG_PREEMPT_RCU is not set
# CONFIG_TREE_RCU_TRACE is not set
# CONFIG_IKCONFIG is not set
CONFIG_LOG_BUF_SHIFT=14
# CONFIG_CGROUPS is not set
# CONFIG_CHECKPOINT_RESTORE is not set
# CONFIG_NAMESPACES is not set
# CONFIG_SCHED_AUTOGROUP is not set
CONFIG_SYSFS_DEPRECATED=y
CONFIG_SYSFS_DEPRECATED_V2=y
# CONFIG_RELAY is not set
# CONFIG_BLK_DEV_INITRD is not set
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
CONFIG_SYSCTL=y
CONFIG_ANON_INODES=y
CONFIG_EXPERT=y
# CONFIG_SYSCTL_SYSCALL is not set
# CONFIG_KALLSYMS is not set
CONFIG_HOTPLUG=y
CONFIG_PRINTK=y
CONFIG_BUG=y
# CONFIG_ELF_CORE is not set
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_EPOLL=y
CONFIG_SIGNALFD=y
CONFIG_TIMERFD=y
CONFIG_EVENTFD=y
CONFIG_SHMEM=y
CONFIG_AIO=y
CONFIG_EMBEDDED=y
CONFIG_HAVE_PERF_EVENTS=y
CONFIG_PERF_USE_VMALLOC=y

#
# Kernel Performance Events And Counters
#
# CONFIG_PERF_EVENTS is not set
# CONFIG_PERF_COUNTERS is not set
# CONFIG_VM_EVENT_COUNTERS is not set
CONFIG_TINY=y
# CONFIG_ETHTOOL is not set
CONFIG_MAX_SWAPFILES_SHIFT=0
CONFIG_MAX_USER_RT_PRIO=100
CONFIG_PCI_QUIRKS=y
# CONFIG_COMPAT_BRK is not set
CONFIG_SLAB=y
# CONFIG_SLUB is not set
# CONFIG_SLOB is not set
# CONFIG_PROFILING is not set
CONFIG_HAVE_OPROFILE=y
# CONFIG_KPROBES is not set
# CONFIG_JUMP_LABEL is not set
CONFIG_HAVE_KPROBES=y
CONFIG_HAVE_KRETPROBES=y
CONFIG_HAVE_DMA_ATTRS=y
CONFIG_HAVE_GENERIC_INIT_TASK=y
CONFIG_HAVE_DMA_API_DEBUG=y
CONFIG_HAVE_ARCH_JUMP_LABEL=y

#
# GCOV-based kernel profiling
#
# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
# CONFIG_SLABINFO is not set
CONFIG_RT_MUTEXES=y
CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
# CONFIG_MODULE_FORCE_LOAD is not set
CONFIG_MODULE_UNLOAD=y
# CONFIG_MODULE_FORCE_UNLOAD is not set
# CONFIG_MODVERSIONS is not set
# CONFIG_MODULE_SRCVERSION_ALL is not set
CONFIG_BLOCK=y
CONFIG_LBDAF=y
# CONFIG_BLK_DEV_BSG is not set
# CONFIG_BLK_DEV_BSGLIB is not set
# CONFIG_BLK_DEV_INTEGRITY is not set

#
# Partition Types
#
CONFIG_PARTITION_ADVANCED=y
# CONFIG_ACORN_PARTITION is not set
# CONFIG_OSF_PARTITION is not set
# CONFIG_AMIGA_PARTITION is not set
# CONFIG_ATARI_PARTITION is not set
# CONFIG_MAC_PARTITION is not set
CONFIG_MSDOS_PARTITION=y
# CONFIG_BSD_DISKLABEL is not set
# CONFIG_MINIX_SUBPARTITION is not set
# CONFIG_SOLARIS_X86_PARTITION is not set
# CONFIG_UNIXWARE_DISKLABEL is not set
# CONFIG_LDM_PARTITION is not set
# CONFIG_SGI_PARTITION is not set
# CONFIG_ULTRIX_PARTITION is not set
# CONFIG_SUN_PARTITION is not set
# CONFIG_KARMA_PARTITION is not set
CONFIG_EFI_PARTITION=y
# CONFIG_SYSV68_PARTITION is not set

#
# IO Schedulers
#
CONFIG_IOSCHED_NOOP=y
# CONFIG_IOSCHED_DEADLINE is not set
# CONFIG_IOSCHED_CFQ is not set
CONFIG_DEFAULT_NOOP=y
CONFIG_DEFAULT_IOSCHED="noop"
# CONFIG_INLINE_SPIN_TRYLOCK is not set
# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
# CONFIG_INLINE_SPIN_LOCK is not set
# CONFIG_INLINE_SPIN_LOCK_BH is not set
# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
# CONFIG_INLINE_READ_TRYLOCK is not set
# CONFIG_INLINE_READ_LOCK is not set
# CONFIG_INLINE_READ_LOCK_BH is not set
# CONFIG_INLINE_READ_LOCK_IRQ is not set
# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
CONFIG_INLINE_READ_UNLOCK=y
# CONFIG_INLINE_READ_UNLOCK_BH is not set
CONFIG_INLINE_READ_UNLOCK_IRQ=y
# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
# CONFIG_INLINE_WRITE_TRYLOCK is not set
# CONFIG_INLINE_WRITE_LOCK is not set
# CONFIG_INLINE_WRITE_LOCK_BH is not set
# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
CONFIG_INLINE_WRITE_UNLOCK=y
# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
# CONFIG_MUTEX_SPIN_ON_OWNER is not set
# CONFIG_FREEZER is not set

#
# Bus options (PCI, PCMCIA, EISA, ISA, TC)
#
CONFIG_HW_HAS_PCI=y
CONFIG_PCI=y
CONFIG_PCI_DOMAINS=y
# CONFIG_ARCH_SUPPORTS_MSI is not set
# CONFIG_PCI_REALLOC_ENABLE_AUTO is not set
# CONFIG_PCI_STUB is not set
CONFIG_PCI_DISABLE_COMMON_QUIRKS=y
# CONFIG_PCI_IOV is not set
# CONFIG_PCI_PRI is not set
# CONFIG_PCI_PASID is not set
CONFIG_PCIEPORTBUS=y
# CONFIG_PCIEAER is not set
# CONFIG_PCIEASPM is not set
CONFIG_MMU=y
# CONFIG_PCCARD is not set
# CONFIG_HOTPLUG_PCI is not set
# CONFIG_RAPIDIO is not set

#
# Executable file formats
#
CONFIG_BINFMT_ELF=y
CONFIG_ARCH_BINFMT_ELF_RANDOMIZE_PIE=y
# CONFIG_HAVE_AOUT is not set
# CONFIG_BINFMT_MISC is not set
CONFIG_TRAD_SIGNALS=y

#
# Power management options
#
# CONFIG_ARCH_HIBERNATION_POSSIBLE is not set
# CONFIG_ARCH_SUSPEND_POSSIBLE is not set
# CONFIG_PM_RUNTIME is not set
CONFIG_NET=y
CONFIG_SHORTCUT_FE=y

#
# Networking options
#
CONFIG_PACKET=y
CONFIG_UNIX=y
# CONFIG_UNIX_DIAG is not set
# CONFIG_NET_KEY is not set
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
CONFIG_IP_ADVANCED_ROUTER=y
# CONFIG_IP_FIB_TRIE_STATS is not set
CONFIG_IP_MULTIPLE_TABLES=y
CONFIG_IP_ROUTE_MULTIPATH=y
# CONFIG_IP_ROUTE_VERBOSE is not set
# CONFIG_IP_PNP is not set
# CONFIG_NET_IPIP is not set
CONFIG_NET_IPGRE_DEMUX=y
# CONFIG_NET_IPGRE is not set
CONFIG_IP_MROUTE=y
# CONFIG_IP_MROUTE_MULTIPLE_TABLES is not set
# CONFIG_IP_PIMSM_V1 is not set
# CONFIG_IP_PIMSM_V2 is not set
# CONFIG_ARPD is not set
CONFIG_SYN_COOKIES=y
# CONFIG_INET_AH is not set
# CONFIG_INET_ESP is not set
# CONFIG_INET_IPCOMP is not set
# CONFIG_INET_XFRM_TUNNEL is not set
CONFIG_INET_TUNNEL=y
# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
# CONFIG_INET_XFRM_MODE_TUNNEL is not set
# CONFIG_INET_XFRM_MODE_BEET is not set
# CONFIG_INET_LRO is not set
# CONFIG_INET_DIAG is not set
# CONFIG_INET_UDPLITE is not set
# CONFIG_TCP_CONG_ADVANCED is not set
CONFIG_TCP_CONG_CUBIC=y
CONFIG_DEFAULT_TCP_CONG="cubic"
# CONFIG_TCP_MD5SIG is not set
CONFIG_IPV6=y
CONFIG_IPV6_PRIVACY=y
CONFIG_IPV6_ROUTER_PREF=y
# CONFIG_IPV6_ROUTE_INFO is not set
# CONFIG_IPV6_OPTIMISTIC_DAD is not set
# CONFIG_INET6_AH is not set
# CONFIG_INET6_ESP is not set
# CONFIG_INET6_IPCOMP is not set
# CONFIG_IPV6_MIP6 is not set
# CONFIG_INET6_XFRM_TUNNEL is not set
# CONFIG_INET6_TUNNEL is not set
# CONFIG_INET6_XFRM_MODE_TRANSPORT is not set
# CONFIG_INET6_XFRM_MODE_TUNNEL is not set
# CONFIG_INET6_XFRM_MODE_BEET is not set
# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
CONFIG_IPV6_SIT=y
CONFIG_IPV6_SIT_6RD=y
CONFIG_IPV6_NDISC_NODETYPE=y
# CONFIG_IPV6_TUNNEL is not set
# CONFIG_IPV6_MULTIPLE_TABLES is not set
CONFIG_IPV6_MROUTE=y
# CONFIG_IPV6_MROUTE_MULTIPLE_TABLES is not set
# CONFIG_IPV6_PIMSM_V2 is not set
# CONFIG_NETWORK_SECMARK is not set
# CONFIG_NETWORK_PHY_TIMESTAMPING is not set
CONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not set
CONFIG_NETFILTER_ADVANCED=y
CONFIG_BRIDGE_NETFILTER=y

#
# Core Netfilter Configuration
#
CONFIG_NAT_CONE=y
# CONFIG_NAT_LINUX is not set
CONFIG_NETFILTER_RALINK_SWQOS_SUPPORT=y
CONFIG_NETFILTER_FP_SMB=y
CONFIG_NETFILTER_NETLINK=m
# CONFIG_NETFILTER_NETLINK_ACCT is not set
# CONFIG_NETFILTER_NETLINK_QUEUE is not set
# CONFIG_NETFILTER_NETLINK_LOG is not set
CONFIG_NF_CONNTRACK=y
CONFIG_NF_CONNTRACK_MARK=y
CONFIG_NF_CONNTRACK_PROCFS=y
# CONFIG_NF_CONNTRACK_EVENTS is not set
# CONFIG_NF_CONNTRACK_TIMEOUT is not set
# CONFIG_NF_CONNTRACK_TIMESTAMP is not set
# CONFIG_NF_CT_PROTO_DCCP is not set
CONFIG_NF_CT_PROTO_GRE=m
# CONFIG_NF_CT_PROTO_SCTP is not set
# CONFIG_NF_CT_PROTO_UDPLITE is not set
# CONFIG_NF_CONNTRACK_AMANDA is not set
CONFIG_NF_CONNTRACK_FTP=m
CONFIG_NF_CONNTRACK_H323=m
# CONFIG_NF_CONNTRACK_IRC is not set
# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set
# CONFIG_NF_CONNTRACK_SNMP is not set
CONFIG_NF_CONNTRACK_PPTP=m
CONFIG_NF_CONNTRACK_RTSP=m
# CONFIG_NF_CONNTRACK_SANE is not set
CONFIG_NF_CONNTRACK_SIP=m
# CONFIG_NF_CONNTRACK_TFTP is not set
# CONFIG_NF_CT_NETLINK is not set
# CONFIG_NF_CT_NETLINK_TIMEOUT is not set
CONFIG_NETFILTER_TPROXY=m
CONFIG_NETFILTER_XTABLES=y

#
# Xtables combined modules
#
CONFIG_NETFILTER_XT_MARK=y
CONFIG_NETFILTER_XT_CONNMARK=y

#
# Xtables targets
#
CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
CONFIG_NETFILTER_XT_TARGET_CT=m
CONFIG_NETFILTER_XT_TARGET_DSCP=m
CONFIG_NETFILTER_XT_TARGET_HL=m
# CONFIG_NETFILTER_XT_TARGET_IDLETIMER is not set
CONFIG_NETFILTER_XT_TARGET_LOG=y
# CONFIG_NETFILTER_XT_TARGET_IMQ is not set
CONFIG_NETFILTER_XT_TARGET_MARK=m
# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
CONFIG_NETFILTER_XT_TARGET_TEE=m
CONFIG_NETFILTER_XT_TARGET_TPROXY=m
# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
CONFIG_NETFILTER_XT_TARGET_TCPMSS=y
# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set

#
# Xtables matches
#
# CONFIG_NETFILTER_XT_MATCH_ADDRTYPE is not set
# CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set
CONFIG_NETFILTER_XT_MATCH_COMMENT=m
CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=y
CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
# CONFIG_NETFILTER_XT_MATCH_CPU is not set
# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
# CONFIG_NETFILTER_XT_MATCH_DEVGROUP is not set
CONFIG_NETFILTER_XT_MATCH_DSCP=m
# CONFIG_NETFILTER_XT_MATCH_ECN is not set
# CONFIG_NETFILTER_XT_MATCH_ESP is not set
# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
# CONFIG_NETFILTER_XT_MATCH_HELPER is not set
CONFIG_NETFILTER_XT_MATCH_HL=m
CONFIG_NETFILTER_XT_MATCH_IPRANGE=y
CONFIG_NETFILTER_XT_MATCH_LENGTH=m
CONFIG_NETFILTER_XT_MATCH_LIMIT=y
CONFIG_NETFILTER_XT_MATCH_MAC=y
CONFIG_NETFILTER_XT_MATCH_MARK=y
CONFIG_NETFILTER_XT_MATCH_MULTIPORT=y
# CONFIG_NETFILTER_XT_MATCH_NFACCT is not set
# CONFIG_NETFILTER_XT_MATCH_OSF is not set
CONFIG_NETFILTER_XT_MATCH_OWNER=m
CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
# CONFIG_NETFILTER_XT_MATCH_REALM is not set
CONFIG_NETFILTER_XT_MATCH_RECENT=y
CONFIG_NETFILTER_XT_MATCH_SCTP=m
CONFIG_NETFILTER_XT_MATCH_SOCKET=m
CONFIG_NETFILTER_XT_MATCH_STATE=y
# CONFIG_NETFILTER_XT_MATCH_LAYER7 is not set
# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
CONFIG_NETFILTER_XT_MATCH_STRING=m
CONFIG_NETFILTER_XT_MATCH_WEBSTR=m
CONFIG_NETFILTER_XT_MATCH_TCPMSS=y
CONFIG_NETFILTER_XT_MATCH_TIME=y
CONFIG_NETFILTER_XT_MATCH_U32=y
# CONFIG_NETFILTER_XT_MATCH_ETHPORT is not set
# CONFIG_IP_SET is not set
# CONFIG_IP_VS is not set

#
# IP: Netfilter Configuration
#
CONFIG_NF_DEFRAG_IPV4=y
CONFIG_NF_CONNTRACK_IPV4=y
# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
# CONFIG_IP_NF_QUEUE is not set
CONFIG_IP_NF_IPTABLES=y
CONFIG_IP_NF_IPTABLES_SPEEDUP=y
# CONFIG_IP_NF_MATCH_AH is not set
# CONFIG_IP_NF_MATCH_ECN is not set
# CONFIG_IP_NF_MATCH_RPFILTER is not set
CONFIG_IP_NF_MATCH_TTL=m
# CONFIG_IP_NF_MATCH_IPP2P is not set
CONFIG_IP_NF_FILTER=y
CONFIG_IP_NF_TARGET_REJECT=y
# CONFIG_IP_NF_TARGET_ULOG is not set
CONFIG_NF_NAT=y
CONFIG_NF_NAT_NEEDED=y
CONFIG_IP_NF_TARGET_MASQUERADE=y
CONFIG_IP_NF_TARGET_NETMAP=y
CONFIG_IP_NF_TARGET_REDIRECT=m
CONFIG_NF_NAT_PROTO_GRE=m
CONFIG_NF_NAT_FTP=m
# CONFIG_NF_NAT_IRC is not set
# CONFIG_NF_NAT_TFTP is not set
# CONFIG_NF_NAT_AMANDA is not set
CONFIG_NF_NAT_PPTP=m
CONFIG_NF_NAT_RTSP=m
CONFIG_NF_NAT_H323=m
CONFIG_NF_NAT_SIP=m
CONFIG_IP_NF_MANGLE=m
# CONFIG_IP_NF_TARGET_CLUSTERIP is not set
# CONFIG_IP_NF_TARGET_ECN is not set
CONFIG_IP_NF_TARGET_TTL=m
CONFIG_IP_NF_RAW=m
# CONFIG_IP_NF_ARPTABLES is not set

#
# IPv6: Netfilter Configuration
#
CONFIG_NF_DEFRAG_IPV6=y
CONFIG_NF_CONNTRACK_IPV6=y
CONFIG_IP6_NF_IPTABLES=y
# CONFIG_IP6_NF_MATCH_AH is not set
# CONFIG_IP6_NF_MATCH_EUI64 is not set
# CONFIG_IP6_NF_MATCH_FRAG is not set
# CONFIG_IP6_NF_MATCH_OPTS is not set
# CONFIG_IP6_NF_MATCH_HL is not set
# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
# CONFIG_IP6_NF_MATCH_MH is not set
# CONFIG_IP6_NF_MATCH_RPFILTER is not set
# CONFIG_IP6_NF_MATCH_RT is not set
CONFIG_IP6_NF_TARGET_HL=m
CONFIG_IP6_NF_FILTER=y
CONFIG_IP6_NF_TARGET_REJECT=y
CONFIG_IP6_NF_MANGLE=m
# CONFIG_IP6_NF_RAW is not set
CONFIG_BRIDGE_NF_EBTABLES=m
CONFIG_BRIDGE_EBT_BROUTE=m
CONFIG_BRIDGE_EBT_T_FILTER=m
CONFIG_BRIDGE_EBT_T_NAT=m
CONFIG_BRIDGE_EBT_802_3=m
CONFIG_BRIDGE_EBT_AMONG=m
CONFIG_BRIDGE_EBT_ARP=m
CONFIG_BRIDGE_EBT_IP=m
CONFIG_BRIDGE_EBT_IP6=m
CONFIG_BRIDGE_EBT_LIMIT=m
CONFIG_BRIDGE_EBT_MARK=m
CONFIG_BRIDGE_EBT_PKTTYPE=m
CONFIG_BRIDGE_EBT_STP=m
CONFIG_BRIDGE_EBT_VLAN=m
CONFIG_BRIDGE_EBT_ARPREPLY=m
CONFIG_BRIDGE_EBT_DNAT=m
CONFIG_BRIDGE_EBT_MARK_T=m
CONFIG_BRIDGE_EBT_REDIRECT=m
CONFIG_BRIDGE_EBT_SNAT=m
CONFIG_BRIDGE_EBT_LOG=m
CONFIG_BRIDGE_EBT_ULOG=m
CONFIG_BRIDGE_EBT_NFLOG=m
# CONFIG_IP_DCCP is not set
# CONFIG_IP_SCTP is not set
# CONFIG_RDS is not set
# CONFIG_TIPC is not set
# CONFIG_ATM is not set
CONFIG_L2TP=y
# CONFIG_L2TP_V3 is not set
CONFIG_STP=y
CONFIG_BRIDGE=y
CONFIG_BRIDGE_2WAYS_FDB=y
CONFIG_BRIDGE_IGMP_SNOOPING=y
CONFIG_BRIDGE_IGMP_EVENT_HOOK=y
CONFIG_BRIDGE_EAP=y
# CONFIG_NET_DSA is not set
CONFIG_VLAN_8021Q=y
CONFIG_VLAN_8021Q_DOUBLE_TAG=y
# CONFIG_VLAN_8021Q_GVRP is not set
# CONFIG_DECNET is not set
CONFIG_LLC=y
# CONFIG_LLC2 is not set
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
# CONFIG_PHONET is not set
# CONFIG_IEEE802154 is not set
# CONFIG_NET_SCHED is not set
# CONFIG_DCB is not set
# CONFIG_BATMAN_ADV is not set
# CONFIG_OPENVSWITCH is not set
CONFIG_BQL=y

#
# Network testing
#
# CONFIG_NET_PKTGEN is not set
CONFIG_NET_PPPOE_PTHROUGH=y
# CONFIG_HAMRADIO is not set
# CONFIG_CAN is not set
# CONFIG_IRDA is not set
# CONFIG_BT is not set
# CONFIG_AF_RXRPC is not set
CONFIG_FIB_RULES=y
CONFIG_WIRELESS=y
CONFIG_WIRELESS_EXT=y
CONFIG_WEXT_CORE=y
# CONFIG_WEXT_PROC is not set
CONFIG_WEXT_SPY=y
CONFIG_WEXT_PRIV=y
# CONFIG_CFG80211 is not set
# CONFIG_WIRELESS_EXT_SYSFS is not set
# CONFIG_LIB80211 is not set
# CONFIG_LIB80211_CRYPT_WEP is not set
# CONFIG_LIB80211_CRYPT_CCMP is not set
# CONFIG_LIB80211_CRYPT_TKIP is not set

#
# CFG80211 needs to be enabled for MAC80211
#
# CONFIG_WIMAX is not set
# CONFIG_RFKILL is not set
# CONFIG_NET_9P is not set
# CONFIG_CAIF is not set
# CONFIG_CEPH_LIB is not set
# CONFIG_NFC is not set

#
# Device Drivers
#

#
# ASUS NVRAM
#
CONFIG_ASUS_NVRAM_API=y

#
# Generic Driver Options
#
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
# CONFIG_DEVTMPFS is not set
CONFIG_STANDALONE=y
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
CONFIG_FW_LOADER=y
CONFIG_FIRMWARE_IN_KERNEL=y
CONFIG_EXTRA_FIRMWARE=""
# CONFIG_SYS_HYPERVISOR is not set
# CONFIG_GENERIC_CPU_DEVICES is not set
# CONFIG_DMA_SHARED_BUFFER is not set
# CONFIG_CONNECTOR is not set
CONFIG_MTD=y
# CONFIG_MTD_TESTS is not set
# CONFIG_MTD_REDBOOT_PARTS is not set
# CONFIG_MTD_CMDLINE_PARTS is not set
# CONFIG_MTD_AR7_PARTS is not set

#
# User Modules And Translation Layers
#
CONFIG_MTD_BLKDEVS=y
CONFIG_MTD_BLOCK=y
# CONFIG_FTL is not set
# CONFIG_NFTL is not set
# CONFIG_INFTL is not set
# CONFIG_RFD_FTL is not set
# CONFIG_SSFDC is not set
# CONFIG_SM_FTL is not set
# CONFIG_MTD_OOPS is not set

#
# RAM/ROM/Flash chip drivers
#
# CONFIG_MTD_CFI is not set
# CONFIG_MTD_JEDECPROBE is not set
CONFIG_MTD_MAP_BANK_WIDTH_1=y
CONFIG_MTD_MAP_BANK_WIDTH_2=y
CONFIG_MTD_MAP_BANK_WIDTH_4=y
# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
CONFIG_MTD_CFI_I1=y
CONFIG_MTD_CFI_I2=y
# CONFIG_MTD_CFI_I4 is not set
# CONFIG_MTD_CFI_I8 is not set
# CONFIG_MTD_RAM is not set
# CONFIG_MTD_ROM is not set
# CONFIG_MTD_ABSENT is not set

#
# Mapping drivers for chip access
#
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
# CONFIG_MTD_INTEL_VR_NOR is not set
# CONFIG_MTD_PLATRAM is not set

#
# Self-contained MTD device drivers
#
# CONFIG_MTD_PMC551 is not set
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_PHRAM is not set
# CONFIG_MTD_MTDRAM is not set
# CONFIG_MTD_BLOCK2MTD is not set

#
# Disk-On-Chip Device Drivers
#
# CONFIG_MTD_DOCG3 is not set
# CONFIG_MTD_NAND is not set
# CONFIG_MTD_ONENAND is not set

#
# LPDDR flash memory drivers
#
# CONFIG_MTD_LPDDR is not set
# CONFIG_MTD_UBI is not set

#
# Ralink MTD support
#
CONFIG_MTD_RALINK=y
CONFIG_MTD_SPI_RALINK=y
CONFIG_MTD_SPI_FAST_CLOCK=y
CONFIG_MTD_SPI_READ_NORM=y
# CONFIG_MTD_SPI_READ_FAST is not set
# CONFIG_RT2880_FLASH_4M is not set
# CONFIG_RT2880_FLASH_8M is not set
CONFIG_RT2880_FLASH_16M=y
# CONFIG_RT2880_FLASH_32M is not set
# CONFIG_RT2880_FLASH_AUTO is not set
CONFIG_RT2880_MTD_PHYSMAP_START=0x1C000000
CONFIG_RT2880_MTD_PHYSMAP_LEN=0x1000000
CONFIG_RT2880_MTD_PHYSMAP_BUSWIDTH=2
# CONFIG_RT2880_ROOTFS_IN_RAM is not set
CONFIG_RT2880_ROOTFS_IN_FLASH=y
CONFIG_ROOTFS_IN_FLASH_NO_PADDING=y
CONFIG_MTD_STORE_PART_SIZ=0x80000
# CONFIG_PARPORT is not set
CONFIG_BLK_DEV=y
# CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set
# CONFIG_BLK_CPQ_DA is not set
# CONFIG_BLK_CPQ_CISS_DA is not set
# CONFIG_BLK_DEV_DAC960 is not set
# CONFIG_BLK_DEV_UMEM is not set
# CONFIG_BLK_DEV_COW_COMMON is not set
CONFIG_BLK_DEV_LOOP=y
CONFIG_BLK_DEV_LOOP_MIN_COUNT=8
# CONFIG_BLK_DEV_CRYPTOLOOP is not set

#
# DRBD disabled because PROC_FS, INET or CONNECTOR not selected
#
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_NVME is not set
# CONFIG_BLK_DEV_SX8 is not set
# CONFIG_BLK_DEV_UB is not set
# CONFIG_BLK_DEV_RAM is not set
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set
# CONFIG_BLK_DEV_RBD is not set

#
# Misc devices
#
# CONFIG_PHANTOM is not set
# CONFIG_INTEL_MID_PTI is not set
# CONFIG_SGI_IOC4 is not set
# CONFIG_TIFM_CORE is not set
# CONFIG_ENCLOSURE_SERVICES is not set
# CONFIG_HP_ILO is not set
# CONFIG_PCH_PHUB is not set
# CONFIG_C2PORT is not set

#
# EEPROM support
#
# CONFIG_EEPROM_93CX6 is not set
# CONFIG_CB710_CORE is not set

#
# Texas Instruments shared transport line discipline
#

#
# Altera FPGA firmware download module
#

#
# SCSI device support
#
CONFIG_SCSI_MOD=y
# CONFIG_RAID_ATTRS is not set
CONFIG_SCSI=y
CONFIG_SCSI_DMA=y
# CONFIG_SCSI_TGT is not set
# CONFIG_SCSI_NETLINK is not set
CONFIG_SCSI_PROC_FS=y

#
# SCSI support type (disk, tape, CD-ROM)
#
CONFIG_BLK_DEV_SD=y
# CONFIG_CHR_DEV_ST is not set
# CONFIG_CHR_DEV_OSST is not set
CONFIG_BLK_DEV_SR=m
# CONFIG_BLK_DEV_SR_VENDOR is not set
CONFIG_CHR_DEV_SG=y
# CONFIG_CHR_DEV_SCH is not set
CONFIG_SCSI_MULTI_LUN=y
# CONFIG_SCSI_CONSTANTS is not set
# CONFIG_SCSI_LOGGING is not set
# CONFIG_SCSI_SCAN_ASYNC is not set
# CONFIG_SCSI_WAIT_SCAN is not set

#
# SCSI Transports
#
# CONFIG_SCSI_SPI_ATTRS is not set
# CONFIG_SCSI_FC_ATTRS is not set
# CONFIG_SCSI_ISCSI_ATTRS is not set
# CONFIG_SCSI_SAS_ATTRS is not set
# CONFIG_SCSI_SAS_LIBSAS is not set
# CONFIG_SCSI_SRP_ATTRS is not set
# CONFIG_SCSI_LOWLEVEL is not set
# CONFIG_SCSI_DH is not set
# CONFIG_SCSI_OSD_INITIATOR is not set
# CONFIG_ATA is not set
# CONFIG_MD is not set
# CONFIG_TARGET_CORE is not set
# CONFIG_FUSION is not set

#
# IEEE 1394 (FireWire) support
#
# CONFIG_FIREWIRE is not set
# CONFIG_FIREWIRE_NOSY is not set
# CONFIG_I2O is not set
CONFIG_NETDEVICES=y
CONFIG_NET_CORE=y
# CONFIG_BONDING is not set
# CONFIG_DUMMY is not set
# CONFIG_EQUALIZER is not set
# CONFIG_NET_FC is not set
CONFIG_MII=y
# CONFIG_NET_TEAM is not set
# CONFIG_MACVLAN is not set
# CONFIG_NETCONSOLE is not set
# CONFIG_NETPOLL is not set
# CONFIG_NET_POLL_CONTROLLER is not set
# CONFIG_IMQ is not set
CONFIG_TUN=y
# CONFIG_VETH is not set
# CONFIG_ARCNET is not set

#
# CAIF transport drivers
#
# CONFIG_ETHERNET is not set
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not set
# CONFIG_PHYLIB is not set
CONFIG_PPP=y
CONFIG_PPP_ONLY_IP=y
# CONFIG_PPP_BSDCOMP is not set
# CONFIG_PPP_DEFLATE is not set
# CONFIG_PPP_FILTER is not set
CONFIG_PPP_MPPE=y
# CONFIG_PPP_MULTILINK is not set
CONFIG_PPPOE=y
CONFIG_PPTP=y
CONFIG_PPPOL2TP=y
CONFIG_PPP_ASYNC=y
CONFIG_PPP_SYNC_TTY=y
# CONFIG_SLIP is not set

#
# USB Network Adapters
#
# CONFIG_USB_CATC is not set
# CONFIG_USB_KAWETH is not set
# CONFIG_USB_PEGASUS is not set
# CONFIG_USB_RTL8150 is not set
# CONFIG_USB_RTL8152 is not set
CONFIG_USB_USBNET=m
# CONFIG_USB_NET_AX8817X is not set
# CONFIG_USB_NET_AX88179_178A is not set
CONFIG_USB_NET_CDCETHER=m
# CONFIG_USB_NET_CDC_EEM is not set
CONFIG_USB_NET_CDC_NCM=m
CONFIG_USB_NET_HUAWEI_CDC_NCM=m
CONFIG_USB_NET_CDC_MBIM=m
# CONFIG_USB_NET_DM9601 is not set
# CONFIG_USB_NET_SMSC75XX is not set
# CONFIG_USB_NET_SMSC95XX is not set
# CONFIG_USB_NET_GL620A is not set
# CONFIG_USB_NET_NET1080 is not set
# CONFIG_USB_NET_PLUSB is not set
# CONFIG_USB_NET_MCS7830 is not set
CONFIG_USB_NET_RNDIS_HOST=m
# CONFIG_USB_NET_CDC_SUBSET is not set
# CONFIG_USB_NET_ZAURUS is not set
# CONFIG_USB_NET_CX82310_ETH is not set
# CONFIG_USB_NET_KALMIA is not set
CONFIG_USB_NET_QMI_WWAN=m
# CONFIG_USB_NET_INT51X1 is not set
# CONFIG_USB_IPHETH is not set
CONFIG_USB_SIERRA_NET=m
# CONFIG_USB_VL600 is not set
CONFIG_WLAN=y
# CONFIG_ATMEL is not set
# CONFIG_PRISM54 is not set
# CONFIG_USB_ZD1201 is not set
# CONFIG_HOSTAP is not set

#
# Enable WiMAX (Networking options) to see the WiMAX drivers
#
# CONFIG_WAN is not set
# CONFIG_VMXNET3 is not set
# CONFIG_ISDN is not set

#
# Input device support
#
# CONFIG_INPUT is not set

#
# Hardware I/O ports
#
# CONFIG_SERIO is not set
# CONFIG_GAMEPORT is not set

#
# Character devices
#
# CONFIG_VT is not set
CONFIG_UNIX98_PTYS=y
# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
# CONFIG_LEGACY_PTYS is not set
# CONFIG_SERIAL_NONSTANDARD is not set
# CONFIG_NOZOMI is not set
# CONFIG_N_GSM is not set
# CONFIG_TRACE_SINK is not set
CONFIG_RALINK_GPIO=y
# CONFIG_RALINK_GPIOMODE_EPHY is not set
# CONFIG_RALINK_GPIOMODE_PA_G is not set
# CONFIG_RALINK_GPIOMODE_SPI is not set
CONFIG_RALINK_GPIOMODE_I2C=y
CONFIG_RALINK_GPIO_IRQ=y
CONFIG_RALINK_GPIO_LED=y
CONFIG_RALINK_GPIO_LED_USB=y
# CONFIG_RALINK_GPIO_LED_USB2 is not set
# CONFIG_RALINK_GDMA is not set
# CONFIG_RALINK_SPI is not set
# CONFIG_RALINK_I2C is not set
# CONFIG_DEVKMEM is not set

#
# Serial drivers
#
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y
# CONFIG_SERIAL_8250_PCI is not set
CONFIG_SERIAL_8250_NR_UARTS=1
CONFIG_SERIAL_8250_RUNTIME_UARTS=1
# CONFIG_SERIAL_8250_EXTENDED is not set

#
# Non-8250 serial port support
#
# CONFIG_SERIAL_MFD_HSU is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
# CONFIG_SERIAL_JSM is not set
# CONFIG_SERIAL_TIMBERDALE is not set
# CONFIG_SERIAL_ALTERA_JTAGUART is not set
# CONFIG_SERIAL_ALTERA_UART is not set
# CONFIG_SERIAL_PCH_UART is not set
# CONFIG_SERIAL_XILINX_PS_UART is not set
# CONFIG_TTY_PRINTK is not set
# CONFIG_IPMI_HANDLER is not set
# CONFIG_HW_RANDOM is not set
# CONFIG_R3964 is not set
# CONFIG_APPLICOM is not set
# CONFIG_RAW_DRIVER is not set
# CONFIG_TCG_TPM is not set
CONFIG_DEVPORT=y
# CONFIG_RAMOOPS is not set
# CONFIG_I2C is not set
# CONFIG_SPI is not set
# CONFIG_HSI is not set

#
# PPS support
#
# CONFIG_PPS is not set

#
# PPS generators support
#

#
# PTP clock support
#

#
# Enable Device Drivers -> PPS to see the PTP clock options.
#
# CONFIG_W1 is not set
# CONFIG_POWER_SUPPLY is not set
# CONFIG_HWMON is not set
# CONFIG_THERMAL is not set
# CONFIG_WATCHDOG is not set
# CONFIG_SSB_POSSIBLE is not set
# CONFIG_BCMA_POSSIBLE is not set

#
# Multifunction device drivers
#
# CONFIG_MFD_CORE is not set
# CONFIG_MFD_SM501 is not set
# CONFIG_HTC_PASIC3 is not set
# CONFIG_MFD_TMIO is not set
# CONFIG_ABX500_CORE is not set
# CONFIG_LPC_SCH is not set
# CONFIG_MFD_RDC321X is not set
# CONFIG_MFD_JANZ_CMODIO is not set
# CONFIG_MFD_VX855 is not set
# CONFIG_REGULATOR is not set
CONFIG_MEDIA_SUPPORT=m

#
# Multimedia core support
#
# CONFIG_MEDIA_CONTROLLER is not set
CONFIG_VIDEO_DEV=m
CONFIG_VIDEO_V4L2_COMMON=m
# CONFIG_DVB_CORE is not set
CONFIG_VIDEO_MEDIA=m

#
# Multimedia drivers
#
# CONFIG_MEDIA_ATTACH is not set
CONFIG_VIDEO_V4L2=m
CONFIG_VIDEOBUF2_CORE=m
CONFIG_VIDEOBUF2_MEMOPS=m
CONFIG_VIDEOBUF2_VMALLOC=m
CONFIG_VIDEO_CAPTURE_DRIVERS=y
# CONFIG_VIDEO_ADV_DEBUG is not set
CONFIG_VIDEO_FIXED_MINOR_RANGES=y
CONFIG_VIDEO_HELPER_CHIPS_AUTO=y

#
# Audio decoders, processors and mixers
#

#
# RDS decoders
#

#
# Video decoders
#

#
# Video and audio decoders
#

#
# MPEG video encoders
#

#
# Video encoders
#

#
# Camera sensor devices
#

#
# Flash devices
#

#
# Video improvement chips
#

#
# Miscelaneous helper chips
#
CONFIG_V4L_USB_DRIVERS=y
CONFIG_USB_VIDEO_CLASS=m
# CONFIG_USB_GSPCA is not set
# CONFIG_VIDEO_HDPVR is not set
# CONFIG_USB_ET61X251 is not set
# CONFIG_USB_SN9C102 is not set
# CONFIG_USB_PWC is not set
# CONFIG_VIDEO_CPIA2 is not set
# CONFIG_USB_ZR364XX is not set
# CONFIG_USB_STKWEBCAM is not set
# CONFIG_USB_S2255 is not set
# CONFIG_V4L_PCI_DRIVERS is not set
# CONFIG_V4L_PLATFORM_DRIVERS is not set
# CONFIG_V4L_MEM2MEM_DRIVERS is not set
# CONFIG_RADIO_ADAPTERS is not set

#
# Graphics support
#
# CONFIG_VGA_ARB is not set
# CONFIG_DRM is not set
# CONFIG_STUB_POULSBO is not set
# CONFIG_VGASTATE is not set
# CONFIG_VIDEO_OUTPUT_CONTROL is not set
# CONFIG_FB is not set
# CONFIG_EXYNOS_VIDEO is not set
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
CONFIG_SOUND=m
# CONFIG_SOUND_OSS_CORE is not set
CONFIG_SND=m
CONFIG_SND_TIMER=m
CONFIG_SND_PCM=m
CONFIG_SND_HWDEP=m
CONFIG_SND_RAWMIDI=m
# CONFIG_SND_SEQUENCER is not set
# CONFIG_SND_MIXER_OSS is not set
# CONFIG_SND_PCM_OSS is not set
# CONFIG_SND_HRTIMER is not set
# CONFIG_SND_DYNAMIC_MINORS is not set
CONFIG_SND_SUPPORT_OLD_API=y
CONFIG_SND_VERBOSE_PROCFS=y
# CONFIG_SND_VERBOSE_PRINTK is not set
# CONFIG_SND_DEBUG is not set
CONFIG_SND_VMASTER=y
# CONFIG_SND_RAWMIDI_SEQ is not set
# CONFIG_SND_OPL3_LIB_SEQ is not set
# CONFIG_SND_OPL4_LIB_SEQ is not set
# CONFIG_SND_SBAWE_SEQ is not set
# CONFIG_SND_EMU10K1_SEQ is not set
CONFIG_SND_DRIVERS=y
# CONFIG_SND_DUMMY is not set
# CONFIG_SND_ALOOP is not set
# CONFIG_SND_MTPAV is not set
# CONFIG_SND_SERIAL_U16550 is not set
# CONFIG_SND_MPU401 is not set
# CONFIG_SND_PCI is not set
CONFIG_SND_MIPS=y
CONFIG_SND_USB=y
CONFIG_SND_USB_AUDIO=m
CONFIG_SND_USB_UA101=m
CONFIG_SND_USB_CAIAQ=m
CONFIG_SND_USB_6FIRE=m
# CONFIG_SND_SOC is not set
# CONFIG_SOUND_PRIME is not set
CONFIG_USB_ARCH_HAS_OHCI=y
CONFIG_USB_ARCH_HAS_EHCI=y
CONFIG_USB_ARCH_HAS_XHCI=y
CONFIG_USB_SUPPORT=y
CONFIG_USB_COMMON=y
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB=y
# CONFIG_USB_DEBUG is not set
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y

#
# Miscellaneous USB options
#
CONFIG_USB_DEVICEFS=y
CONFIG_USB_DEVICE_CLASS=y
# CONFIG_USB_DYNAMIC_MINORS is not set
# CONFIG_USB_OTG_WHITELIST is not set
# CONFIG_USB_OTG_BLACKLIST_HUB is not set
# CONFIG_USB_MON is not set
# CONFIG_USB_WUSB_CBAF is not set

#
# USB Host Controller Drivers
#
# CONFIG_USB_C67X00_HCD is not set
# CONFIG_USB_XHCI_HCD is not set
CONFIG_USB_EHCI_HCD=m
# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
CONFIG_USB_EHCI_TT_NEWSCHED=y
# CONFIG_USB_OXU210HP_HCD is not set
# CONFIG_USB_ISP116X_HCD is not set
# CONFIG_USB_ISP1760_HCD is not set
# CONFIG_USB_ISP1362_HCD is not set
CONFIG_USB_OHCI_HCD=m
CONFIG_USB_OHCI_HCD_PLATFORM=y
CONFIG_USB_EHCI_HCD_PLATFORM=y
# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
CONFIG_USB_OHCI_LITTLE_ENDIAN=y
# CONFIG_USB_UHCI_HCD is not set
# CONFIG_USB_SL811_HCD is not set
# CONFIG_USB_R8A66597_HCD is not set

#
# USB Device Class drivers
#
CONFIG_USB_ACM=m
CONFIG_USB_PRINTER=m
CONFIG_USB_WDM=m
# CONFIG_USB_TMC is not set

#
# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
#

#
# also be needed; see USB_STORAGE Help for more info
#
CONFIG_USB_STORAGE=m
# CONFIG_USB_STORAGE_DEBUG is not set
# CONFIG_USB_STORAGE_REALTEK is not set
# CONFIG_USB_STORAGE_DATAFAB is not set
# CONFIG_USB_STORAGE_FREECOM is not set
# CONFIG_USB_STORAGE_ISD200 is not set
# CONFIG_USB_STORAGE_USBAT is not set
# CONFIG_USB_STORAGE_SDDR09 is not set
# CONFIG_USB_STORAGE_SDDR55 is not set
# CONFIG_USB_STORAGE_JUMPSHOT is not set
# CONFIG_USB_STORAGE_ALAUDA is not set
# CONFIG_USB_STORAGE_KARMA is not set
# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
# CONFIG_USB_STORAGE_ENE_UB6250 is not set
CONFIG_USB_LIBUSUAL=y

#
# USB Imaging devices
#
# CONFIG_USB_MDC800 is not set
# CONFIG_USB_MICROTEK is not set

#
# USB port drivers
#
CONFIG_USB_SERIAL=m
# CONFIG_USB_EZUSB is not set
CONFIG_USB_SERIAL_GENERIC=y
# CONFIG_USB_SERIAL_AIRCABLE is not set
# CONFIG_USB_SERIAL_ARK3116 is not set
# CONFIG_USB_SERIAL_BELKIN is not set
CONFIG_USB_SERIAL_CH341=m
# CONFIG_USB_SERIAL_WHITEHEAT is not set
# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
# CONFIG_USB_SERIAL_CP210X is not set
# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
# CONFIG_USB_SERIAL_EMPEG is not set
# CONFIG_USB_SERIAL_FTDI_SIO is not set
# CONFIG_USB_SERIAL_FUNSOFT is not set
# CONFIG_USB_SERIAL_VISOR is not set
# CONFIG_USB_SERIAL_IPAQ is not set
# CONFIG_USB_SERIAL_IR is not set
# CONFIG_USB_SERIAL_EDGEPORT is not set
# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
# CONFIG_USB_SERIAL_F81232 is not set
# CONFIG_USB_SERIAL_GARMIN is not set
# CONFIG_USB_SERIAL_IPW is not set
# CONFIG_USB_SERIAL_IUU is not set
# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
# CONFIG_USB_SERIAL_KEYSPAN is not set
# CONFIG_USB_SERIAL_KLSI is not set
# CONFIG_USB_SERIAL_KOBIL_SCT is not set
# CONFIG_USB_SERIAL_MCT_U232 is not set
# CONFIG_USB_SERIAL_METRO is not set
# CONFIG_USB_SERIAL_MOS7720 is not set
# CONFIG_USB_SERIAL_MOS7840 is not set
# CONFIG_USB_SERIAL_MOTOROLA is not set
# CONFIG_USB_SERIAL_NAVMAN is not set
CONFIG_USB_SERIAL_PL2303=m
# CONFIG_USB_SERIAL_OTI6858 is not set
# CONFIG_USB_SERIAL_QCAUX is not set
CONFIG_USB_SERIAL_QUALCOMM=m
# CONFIG_USB_SERIAL_SPCP8X5 is not set
# CONFIG_USB_SERIAL_HP4X is not set
# CONFIG_USB_SERIAL_SAFE is not set
# CONFIG_USB_SERIAL_SIEMENS_MPI is not set
CONFIG_USB_SERIAL_SIERRAWIRELESS=m
# CONFIG_USB_SERIAL_SYMBOL is not set
# CONFIG_USB_SERIAL_TI is not set
# CONFIG_USB_SERIAL_CYBERJACK is not set
# CONFIG_USB_SERIAL_XIRCOM is not set
CONFIG_USB_SERIAL_WWAN=m
CONFIG_USB_SERIAL_OPTION=m
# CONFIG_USB_SERIAL_OMNINET is not set
# CONFIG_USB_SERIAL_OPTICON is not set
# CONFIG_USB_SERIAL_VIVOPAY_SERIAL is not set
# CONFIG_USB_SERIAL_ZIO is not set
# CONFIG_USB_SERIAL_SSU100 is not set
# CONFIG_USB_SERIAL_DEBUG is not set

#
# USB Miscellaneous drivers
#
# CONFIG_USB_EMI62 is not set
# CONFIG_USB_EMI26 is not set
# CONFIG_USB_ADUTUX is not set
# CONFIG_USB_SEVSEG is not set
# CONFIG_USB_RIO500 is not set
# CONFIG_USB_LEGOTOWER is not set
# CONFIG_USB_LCD is not set
# CONFIG_USB_LED is not set
# CONFIG_USB_CYPRESS_CY7C63 is not set
# CONFIG_USB_CYTHERM is not set
# CONFIG_USB_IDMOUSE is not set
# CONFIG_USB_FTDI_ELAN is not set
# CONFIG_USB_APPLEDISPLAY is not set
# CONFIG_USB_SISUSBVGA is not set
# CONFIG_USB_LD is not set
# CONFIG_USB_TRANCEVIBRATOR is not set
# CONFIG_USB_IOWARRIOR is not set
# CONFIG_USB_TEST is not set
# CONFIG_USB_ISIGHTFW is not set
# CONFIG_USB_YUREX is not set
# CONFIG_USB_GADGET is not set

#
# OTG and related infrastructure
#
# CONFIG_NOP_USB_XCEIV is not set
# CONFIG_UWB is not set
# CONFIG_MMC is not set
# CONFIG_MEMSTICK is not set
# CONFIG_NEW_LEDS is not set
# CONFIG_ACCESSIBILITY is not set
# CONFIG_INFINIBAND is not set
CONFIG_RTC_LIB=y
# CONFIG_RTC_CLASS is not set
# CONFIG_DMADEVICES is not set
# CONFIG_AUXDISPLAY is not set
# CONFIG_UIO is not set

#
# Virtio drivers
#
# CONFIG_VIRTIO_PCI is not set
# CONFIG_VIRTIO_BALLOON is not set
# CONFIG_VIRTIO_MMIO is not set

#
# Microsoft Hyper-V guest support
#
# CONFIG_STAGING is not set

#
# Hardware Spinlock drivers
#
# CONFIG_IOMMU_SUPPORT is not set

#
# Remoteproc drivers (EXPERIMENTAL)
#

#
# Rpmsg drivers (EXPERIMENTAL)
#
# CONFIG_VIRT_DRIVERS is not set
# CONFIG_PM_DEVFREQ is not set

#
# File systems
#
CONFIG_EXT2_FS=m
CONFIG_EXT2_FS_XATTR=y
# CONFIG_EXT2_FS_POSIX_ACL is not set
# CONFIG_EXT2_FS_SECURITY is not set
# CONFIG_EXT2_FS_XIP is not set
CONFIG_EXT3_FS=m
CONFIG_EXT3_DEFAULTS_TO_ORDERED=y
CONFIG_EXT3_FS_XATTR=y
# CONFIG_EXT3_FS_POSIX_ACL is not set
# CONFIG_EXT3_FS_SECURITY is not set
CONFIG_EXT4_FS=m
CONFIG_EXT4_FS_XATTR=y
# CONFIG_EXT4_FS_POSIX_ACL is not set
# CONFIG_EXT4_FS_SECURITY is not set
# CONFIG_EXT4_DEBUG is not set
CONFIG_JBD=m
CONFIG_JBD2=m
CONFIG_FS_MBCACHE=m
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
# CONFIG_XFS_FS is not set
# CONFIG_GFS2_FS is not set
# CONFIG_BTRFS_FS is not set
# CONFIG_NILFS2_FS is not set
# CONFIG_FS_POSIX_ACL is not set
CONFIG_FILE_LOCKING=y
CONFIG_FSNOTIFY=y
# CONFIG_DNOTIFY is not set
CONFIG_INOTIFY_USER=y
# CONFIG_FANOTIFY is not set
# CONFIG_QUOTA is not set
# CONFIG_QUOTACTL is not set
# CONFIG_AUTOFS4_FS is not set
CONFIG_FUSE_FS=m
# CONFIG_CUSE is not set

#
# Caches
#
CONFIG_FSCACHE=m
CONFIG_FSCACHE_STATS=y
# CONFIG_FSCACHE_HISTOGRAM is not set
# CONFIG_FSCACHE_DEBUG is not set
# CONFIG_FSCACHE_OBJECT_LIST is not set
# CONFIG_CACHEFILES is not set

#
# CD-ROM/DVD Filesystems
#
# CONFIG_ISO9660_FS is not set
# CONFIG_UDF_FS is not set

#
# DOS/FAT/NT Filesystems
#
CONFIG_FAT_FS=m
# CONFIG_MSDOS_FS is not set
CONFIG_VFAT_FS=m
CONFIG_FAT_DEFAULT_CODEPAGE=866
CONFIG_FAT_DEFAULT_IOCHARSET="utf8"
CONFIG_EXFAT_FS=m
CONFIG_EXFAT_DISCARD=y
# CONFIG_EXFAT_DELAYED_SYNC is not set
# CONFIG_EXFAT_KERNEL_DEBUG is not set
# CONFIG_EXFAT_DEBUG_MSG is not set
CONFIG_EXFAT_DEFAULT_CODEPAGE=866
CONFIG_EXFAT_DEFAULT_IOCHARSET="utf8"
CONFIG_UFSD_FS=m
CONFIG_UFSD_USE_NLS=y
# CONFIG_NTFS_FS is not set

#
# Pseudo filesystems
#
CONFIG_PROC_FS=y
CONFIG_PROC_KCORE=y
CONFIG_PROC_SYSCTL=y
# CONFIG_PROC_PAGE_MONITOR is not set
CONFIG_SYSFS=y
CONFIG_TMPFS=y
# CONFIG_TMPFS_POSIX_ACL is not set
# CONFIG_TMPFS_XATTR is not set
# CONFIG_HUGETLB_PAGE is not set
# CONFIG_CONFIGFS_FS is not set
CONFIG_MISC_FILESYSTEMS=y
# CONFIG_ADFS_FS is not set
# CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set
# CONFIG_HFSPLUS_FS is not set
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
# CONFIG_JFFS2_FS is not set
# CONFIG_LOGFS is not set
# CONFIG_CRAMFS is not set
CONFIG_SQUASHFS=y
# CONFIG_SQUASHFS_XATTR is not set
# CONFIG_SQUASHFS_ZLIB is not set
# CONFIG_SQUASHFS_LZO is not set
CONFIG_SQUASHFS_XZ=y
# CONFIG_SQUASHFS_4K_DEVBLK_SIZE is not set
CONFIG_SQUASHFS_EMBEDDED=y
CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=5
# CONFIG_VXFS_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_MINIX_FS_NATIVE_ENDIAN is not set
# CONFIG_OMFS_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
# CONFIG_QNX6FS_FS is not set
# CONFIG_ROMFS_FS is not set
# CONFIG_PSTORE is not set
# CONFIG_SYSV_FS is not set
# CONFIG_UFS_FS is not set
# CONFIG_NETWORK_FILESYSTEMS is not set
CONFIG_NLS=y
CONFIG_NLS_DEFAULT="utf8"
CONFIG_NLS_CODEPAGE_437=y
# CONFIG_NLS_CODEPAGE_737 is not set
# CONFIG_NLS_CODEPAGE_775 is not set
# CONFIG_NLS_CODEPAGE_850 is not set
# CONFIG_NLS_CODEPAGE_852 is not set
# CONFIG_NLS_CODEPAGE_855 is not set
# CONFIG_NLS_CODEPAGE_857 is not set
# CONFIG_NLS_CODEPAGE_860 is not set
# CONFIG_NLS_CODEPAGE_861 is not set
# CONFIG_NLS_CODEPAGE_862 is not set
# CONFIG_NLS_CODEPAGE_863 is not set
# CONFIG_NLS_CODEPAGE_864 is not set
# CONFIG_NLS_CODEPAGE_865 is not set
CONFIG_NLS_CODEPAGE_866=y
# CONFIG_NLS_CODEPAGE_869 is not set
CONFIG_NLS_CODEPAGE_936=y
# CONFIG_NLS_CODEPAGE_950 is not set
# CONFIG_NLS_CODEPAGE_932 is not set
# CONFIG_NLS_CODEPAGE_949 is not set
# CONFIG_NLS_CODEPAGE_874 is not set
# CONFIG_NLS_ISO8859_8 is not set
# CONFIG_NLS_CODEPAGE_1250 is not set
# CONFIG_NLS_CODEPAGE_1251 is not set
# CONFIG_NLS_ASCII is not set
CONFIG_NLS_ISO8859_1=y
# CONFIG_NLS_ISO8859_2 is not set
# CONFIG_NLS_ISO8859_3 is not set
# CONFIG_NLS_ISO8859_4 is not set
# CONFIG_NLS_ISO8859_5 is not set
# CONFIG_NLS_ISO8859_6 is not set
# CONFIG_NLS_ISO8859_7 is not set
# CONFIG_NLS_ISO8859_9 is not set
# CONFIG_NLS_ISO8859_13 is not set
# CONFIG_NLS_ISO8859_14 is not set
# CONFIG_NLS_ISO8859_15 is not set
# CONFIG_NLS_KOI8_R is not set
# CONFIG_NLS_KOI8_U is not set
CONFIG_NLS_UTF8=y

#
# Kernel hacking
#
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
# CONFIG_PRINTK_TIME is not set
CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4
CONFIG_ENABLE_WARN_DEPRECATED=y
CONFIG_ENABLE_MUST_CHECK=y
CONFIG_FRAME_WARN=4096
# CONFIG_MAGIC_SYSRQ is not set
CONFIG_STRIP_ASM_SYMS=y
# CONFIG_UNUSED_SYMBOLS is not set
# CONFIG_DEBUG_FS is not set
# CONFIG_HEADERS_CHECK is not set
# CONFIG_DEBUG_SECTION_MISMATCH is not set
# CONFIG_DEBUG_KERNEL is not set
# CONFIG_HARDLOCKUP_DETECTOR is not set
# CONFIG_SPARSE_RCU_POINTER is not set
# CONFIG_DEBUG_MEMORY_INIT is not set
CONFIG_HAVE_FUNCTION_TRACER=y
CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y
CONFIG_HAVE_DYNAMIC_FTRACE=y
CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
CONFIG_HAVE_C_RECORDMCOUNT=y
# CONFIG_TRACING_SUPPORT is not set
# CONFIG_DMA_API_DEBUG is not set
# CONFIG_ATOMIC64_SELFTEST is not set
# CONFIG_SAMPLES is not set
CONFIG_HAVE_ARCH_KGDB=y
# CONFIG_TEST_KSTRTOX is not set
# CONFIG_EARLY_PRINTK is not set
# CONFIG_CMDLINE_BOOL is not set
# CONFIG_UBOOT_CMDLINE is not set

#
# Security options
#
# CONFIG_KEYS is not set
# CONFIG_SECURITY_DMESG_RESTRICT is not set
# CONFIG_SECURITY is not set
# CONFIG_SECURITYFS is not set
CONFIG_DEFAULT_SECURITY_DAC=y
CONFIG_DEFAULT_SECURITY=""
CONFIG_CRYPTO=y

#
# Crypto core or helper
#
CONFIG_CRYPTO_ALGAPI=y
CONFIG_CRYPTO_ALGAPI2=y
# CONFIG_CRYPTO_AEAD is not set
CONFIG_CRYPTO_BLKCIPHER=y
CONFIG_CRYPTO_BLKCIPHER2=y
CONFIG_CRYPTO_HASH=y
CONFIG_CRYPTO_HASH2=y
CONFIG_CRYPTO_RNG=y
CONFIG_CRYPTO_RNG2=y
CONFIG_CRYPTO_MANAGER=y
CONFIG_CRYPTO_MANAGER2=y
# CONFIG_CRYPTO_USER is not set
CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y
# CONFIG_CRYPTO_GF128MUL is not set
# CONFIG_CRYPTO_NULL is not set
CONFIG_CRYPTO_WORKQUEUE=y
# CONFIG_CRYPTO_CRYPTD is not set
# CONFIG_CRYPTO_AUTHENC is not set
# CONFIG_CRYPTO_TEST is not set

#
# Authenticated Encryption with Associated Data
#
# CONFIG_CRYPTO_CCM is not set
# CONFIG_CRYPTO_GCM is not set
# CONFIG_CRYPTO_SEQIV is not set

#
# Block modes
#
CONFIG_CRYPTO_CBC=y
# CONFIG_CRYPTO_CTR is not set
# CONFIG_CRYPTO_CTS is not set
CONFIG_CRYPTO_ECB=y
# CONFIG_CRYPTO_LRW is not set
# CONFIG_CRYPTO_PCBC is not set
# CONFIG_CRYPTO_XTS is not set

#
# Hash modes
#
CONFIG_CRYPTO_HMAC=m
# CONFIG_CRYPTO_XCBC is not set
# CONFIG_CRYPTO_VMAC is not set

#
# Digest
#
# CONFIG_CRYPTO_CRC32C is not set
# CONFIG_CRYPTO_GHASH is not set
CONFIG_CRYPTO_MD4=m
CONFIG_CRYPTO_MD5=m
# CONFIG_CRYPTO_MICHAEL_MIC is not set
# CONFIG_CRYPTO_RMD128 is not set
# CONFIG_CRYPTO_RMD160 is not set
# CONFIG_CRYPTO_RMD256 is not set
# CONFIG_CRYPTO_RMD320 is not set
CONFIG_CRYPTO_SHA1=y
# CONFIG_CRYPTO_SHA256 is not set
# CONFIG_CRYPTO_SHA512 is not set
# CONFIG_CRYPTO_TGR192 is not set
# CONFIG_CRYPTO_WP512 is not set

#
# Ciphers
#
CONFIG_CRYPTO_AES=y
# CONFIG_CRYPTO_ANUBIS is not set
CONFIG_CRYPTO_ARC4=y
# CONFIG_CRYPTO_BLOWFISH is not set
# CONFIG_CRYPTO_CAMELLIA is not set
# CONFIG_CRYPTO_CAST5 is not set
# CONFIG_CRYPTO_CAST6 is not set
CONFIG_CRYPTO_DES=m
# CONFIG_CRYPTO_FCRYPT is not set
# CONFIG_CRYPTO_KHAZAD is not set
# CONFIG_CRYPTO_SALSA20 is not set
# CONFIG_CRYPTO_SEED is not set
# CONFIG_CRYPTO_SERPENT is not set
# CONFIG_CRYPTO_TEA is not set
# CONFIG_CRYPTO_TWOFISH is not set

#
# Compression
#
# CONFIG_CRYPTO_DEFLATE is not set
# CONFIG_CRYPTO_ZLIB is not set
# CONFIG_CRYPTO_LZO is not set

#
# Random Number Generation
#
# CONFIG_CRYPTO_ANSI_CPRNG is not set
# CONFIG_CRYPTO_USER_API_HASH is not set
# CONFIG_CRYPTO_USER_API_SKCIPHER is not set
CONFIG_CRYPTO_HW=y
CONFIG_CRYPTO_DEV_LINUX=m
CONFIG_CRYPTO_DEV_MTK_AES=m
# CONFIG_CRYPTO_DEV_HIFN_795X is not set
# CONFIG_BINARY_PRINTF is not set

#
# Library routines
#
CONFIG_BITREVERSE=y
CONFIG_NO_GENERIC_PCI_IOPORT_MAP=y
CONFIG_GENERIC_PCI_IOMAP=y
CONFIG_GENERIC_IO=y
CONFIG_CRC_CCITT=y
CONFIG_CRC16=y
# CONFIG_CRC_T10DIF is not set
# CONFIG_CRC_ITU_T is not set
CONFIG_CRC32=y
# CONFIG_CRC32_SELFTEST is not set
# CONFIG_CRC32_SLICEBY8 is not set
# CONFIG_CRC32_SLICEBY4 is not set
CONFIG_CRC32_SARWATE=y
# CONFIG_CRC32_BIT is not set
# CONFIG_CRC7 is not set
# CONFIG_LIBCRC32C is not set
# CONFIG_CRC8 is not set
# CONFIG_ZLIB_INFLATE is not set
# CONFIG_ZLIB_DEFLATE is not set
# CONFIG_LZO_COMPRESS is not set
# CONFIG_LZO_DECOMPRESS is not set
CONFIG_XZ_DEC=y
# CONFIG_XZ_DEC_X86 is not set
# CONFIG_XZ_DEC_POWERPC is not set
# CONFIG_XZ_DEC_IA64 is not set
# CONFIG_XZ_DEC_ARM is not set
# CONFIG_XZ_DEC_ARMTHUMB is not set
# CONFIG_XZ_DEC_SPARC is not set
# CONFIG_XZ_DEC_BCJ is not set
# CONFIG_XZ_DEC_TEST is not set
CONFIG_TEXTSEARCH=y
CONFIG_TEXTSEARCH_KMP=m
CONFIG_TEXTSEARCH_BM=m
CONFIG_TEXTSEARCH_FSM=m
CONFIG_HAS_IOMEM=y
CONFIG_HAS_IOPORT=y
CONFIG_HAS_DMA=y
CONFIG_DQL=y
CONFIG_NLATTR=y
CONFIG_GENERIC_ATOMIC64=y
# CONFIG_AVERAGE is not set
# CONFIG_CORDIC is not set

#
# Ralink Module
#
# CONFIG_RALINK_RDM is not set

#
# Ralink Wired Ethernet Driver
#
CONFIG_RAETH=y
CONFIG_RAETH_NAPI=y
# CONFIG_RAETH_NAPI_GRO is not set
CONFIG_RAETH_BQL=y
CONFIG_RAETH_CHECKSUM_OFFLOAD=y
CONFIG_GE1_MAC_ESW=y
CONFIG_RAETH_ESW=y
# CONFIG_RAETH_ESW_ONE_PORT is not set
# CONFIG_RAETH_SPECIAL_TAG is not set
CONFIG_RAETH_ESW_CONTROL=y
# CONFIG_RAETH_ESW_IGMP_SNOOP_OFF is not set
CONFIG_RAETH_ESW_IGMP_SNOOP_SW=y
# 网口信息
CONFIG_RAETH_ESW_PORT_WAN=0
CONFIG_RAETH_ESW_PORT_LAN1=4
CONFIG_RAETH_ESW_PORT_LAN2=2
CONFIG_RAETH_ESW_PORT_LAN3=3
CONFIG_RAETH_ESW_PORT_LAN4=1
# CONFIG_RAETH_SNMPD is not set
CONFIG_RAETH_READ_MAC_FROM_MTD=y
# CONFIG_RAETH_MEMORY_OPTIMIZATION is not set
# CONFIG_RAETH_DEBUG is not set

#
# Ralink Wireless 802.11 Support
#

#
# 1st Wireless Interface
#
# CONFIG_RT_FIRST_IF_NONE is not set
CONFIG_RT_FIRST_IF_MT7628=y
CONFIG_RT_FIRST_IF_RANGE_2GHZ=y
CONFIG_RT_FIRST_IF_EEPROM_FLASH=y
CONFIG_RT_FIRST_IF_RF_OFFSET=0x40000
CONFIG_RT_FIRST_CARD=7628
CONFIG_RT_FIRST_CARD_EEPROM="flash"

#
# 2nd Wireless Interface
#
# CONFIG_RT_SECOND_IF_NONE is not set
# CONFIG_RT_SECOND_IF_RT3352_INIC is not set
# CONFIG_RT_SECOND_IF_RT3090 is not set
# CONFIG_RT_SECOND_IF_RT5392 is not set
# CONFIG_RT_SECOND_IF_RT5592 is not set
# CONFIG_RT_SECOND_IF_RT3593 is not set
# CONFIG_RT_SECOND_IF_MT7610E is not set
# CONFIG_RT_SECOND_IF_MT7602E is not set
CONFIG_RT_SECOND_IF_MT7612E=y
# CONFIG_RT_SECOND_IF_MT7603E is not set
# CONFIG_RT_SECOND_IF_MT7615E is not set
# CONFIG_RT_SECOND_IF_RANGE_2GHZ is not set
CONFIG_RT_SECOND_IF_RANGE_5GHZ=y
CONFIG_RT_SECOND_IF_EEPROM_FLASH=y
# CONFIG_RT_SECOND_IF_EEPROM_EFUSE is not set
# CONFIG_RT_SECOND_IF_EEPROM_PROM is not set
CONFIG_RT_SECOND_IF_RF_OFFSET=0x48000
CONFIG_RT_SECOND_CARD=7612
CONFIG_RT_SECOND_CARD_EEPROM="flash"

#
# 3rd Wireless Interface
#
CONFIG_RT_THIRD_IF_NONE=y
# CONFIG_RT_THIRD_IF_MT7615E is not set
CONFIG_RT_THIRD_CARD=0

#
# Wireless drivers settings
#

#
# AP MODE MediaTek MT7628/MT7688 RBUS Wireless driver
#
CONFIG_MT7628_AP=m
# CONFIG_MT7628_AP_LED is not set
# CONFIG_MT7628_AP_LED_SOFT is not set
CONFIG_MT7628_AP_LLTD=y
CONFIG_MT7628_AP_WDS=y
CONFIG_MT7628_AP_MBSS=y
CONFIG_MT7628_AP_APCLI=y
# CONFIG_MT7628_AP_APCLI_AUTO_BW is not set
# CONFIG_MT7628_AP_APCLI_CERT is not set
# CONFIG_MT7628_AP_MAC_REPEATER is not set
# CONFIG_MT7628_AP_AIRPLAY is not set
# CONFIG_MT7628_AP_DFS is not set
# CONFIG_MT7628_AP_CARRIER is not set
CONFIG_MT7628_AP_SMART_CARRIER_SENSE=y
# CONFIG_MT7628_AP_GREENAP is not set
# CONFIG_MT7628_AP_IDS is not set
# CONFIG_MT7628_AP_DLS is not set

#
# AP MODE MediaTek MT7620/MT7602E/MT7612E RBUS/PCIe Wireless driver
#
CONFIG_MT76X2_AP=m
CONFIG_MT76X2_AP_LED=y
CONFIG_MT76X2_AP_LLTD=y
CONFIG_MT76X2_AP_WDS=y
CONFIG_MT76X2_AP_MBSS=y
CONFIG_MT76X2_AP_MBSS_NEW_MBSSID_MODE=y
CONFIG_MT76X2_AP_APCLI=y
# CONFIG_MT76X2_AP_APCLI_CERT is not set
# CONFIG_MT76X2_AP_APCLI_AUTO_BW is not set
# CONFIG_MT76X2_AP_MAC_REPEATER is not set
# CONFIG_MT76X2_AP_MWDS is not set
# CONFIG_MT76X2_AP_SMART_MESH is not set
# CONFIG_MT76X2_AP_AIRPLAY is not set
# CONFIG_MT76X2_AP_DFS is not set
# CONFIG_MT76X2_AP_CARRIER is not set
# CONFIG_MT76X2_AP_IDS is not set
# CONFIG_MT76X2_AP_DLS is not set
CONFIG_MT76X2_AP_80211AC_VHT=y
# CONFIG_MT76X2_AP_TXBF_SUPPORT is not set

#
# Wireless drivers common configs
#
# CONFIG_RT_SINGLE_SKU is not set
CONFIG_RT_MAX_CLIENTS=40
# CONFIG_RT_BAND_STEERING is not set
# CONFIG_RT_DOT11R_FT is not set
# CONFIG_RT_DOT11K_RRM is not set
# CONFIG_RT_80211N_DRAFT3 is not set
# CONFIG_RT_80211W_PMF is not set
# CONFIG_RT_WSC is not set
# CONFIG_RT_ED_MONITOR is not set
CONFIG_RT_IGMP_SNOOP=y
# CONFIG_RT_MCAST_RATE_SPECIFIC is not set
# CONFIG_RT_DELAYED_TCP_ACK is not set
# CONFIG_RT_NETIF_BLOCK is not set
# CONFIG_RT_SNMP is not set
CONFIG_RT_READ_MAC_FROM_MTD=y
# CONFIG_RT_MEMORY_OPTIMIZATION is not set
# CONFIG_RT_DEBUG is not set

#
# Ralink NAT Acceleration Mode
#
CONFIG_RA_NAT_NONE=y

#
# Ralink HW Crypto
#

#
# Ralink Peripheral Devices
#
CONFIG_RT3XXX_EHCI_OHCI=y

成品UI

工程文件下载


[button color="info" type="round"]工程文件下载[/button]

固件下载


[button color="info" type="round"]固件下载[/button]

]]>
0 /index.php/archives/627/#comments /index.php/feed/archives/627/
【记录】本地Padavan仓库同步到Github远程仓库 /index.php/archives/591/ /index.php/archives/591/ Sun, 04 Apr 2021 21:59:00 +0800 小渔 本地仓库同步到Github

注意:请先安装好Git环境,这里以Centos7为例

环境安装

yum install git git-lfs -y

同步命令

cd /opt/rt-n56u/
# 进入其工作目录
git init
# 在当前目录新建一个Git代码库
git add .
# 添加当前目录的所有文件到暂存区
git commit -m [message]
# 提交暂存区到仓库区,[message] = 信息
git remote add origin git@github.com:yuos-bit/Padavan.git
# 指定仓库
git push --set-upstream origin master
# 同步源码至远程仓库

常用命令库

新建代码库

# 在当前目录新建一个Git代码库
git init
# 新建一个目录,将其初始化为Git代码库
git init [project-name]
# 下载一个项目和它的整个代码历史
git clone [url]

配置

# Git的设置文件为.gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)。
# 显示当前的Git配置
git config --list
# 编辑Git配置文件
git config -e [--global]
# 设置提交代码时的用户信息
git config [--global] user.name "[name]"
git config [--global] user.email "[email address]"

增加/删除文件

# 添加指定文件到暂存区
git add [file1] [file2] ...
# 添加指定目录到暂存区,包括子目录
git add [dir] 
# 添加当前目录的所有文件到暂存区
git add .
# 添加每个变化前,都会要求确认
# 对于同一个文件的多处变化,可以实现分次提交
git add -p
# 删除工作区文件,并且将这次删除放入暂存区
git rm [file1] [file2] ...
# 停止追踪指定文件,但该文件会保留在工作区
git rm --cached [file]
# 改名文件,并且将这个改名放入暂存区
git mv [file-original] [file-renamed]

代码提交

# 提交暂存区到仓库区
git commit -m [message]
# 提交暂存区的指定文件到仓库区
git commit [file1] [file2] ... -m [message]
# 提交工作区自上次commit之后的变化,直接到仓库区
git commit -a 
# 提交时显示所有diff信息 
git commit -v   
# 使用一次新的commit,替代上一次提交 
# 如果代码没有任何新变化,则用来改写上一次commit的提交信息
git commit --amend -m [message]   
# 重做上一次commit,并包括指定文件的新变化
git commit --amend [file1] [file2] ...

分支

# 列出所有本地分支
git branch   
# 列出所有远程分支 
git branch -r   
# 列出所有本地分支和远程分支 
git branch -a   
# 新建一个分支,但依然停留在当前分支 
git branch [branch-name]   
# 新建一个分支,并切换到该分支 
git checkout -b [branch]   
# 新建一个分支,指向指定commit 
git branch [branch] [commit]   
# 新建一个分支,与指定的远程分支建立追踪关系 
git branch --track [branch] [remote-branch]   
# 切换到指定分支,并更新工作区 
git checkout [branch-name]   
# 切换到上一个分支 
git checkout -   
# 建立追踪关系,在现有分支与指定的远程分支之间 
git branch --set-upstream [branch] [remote-branch]   
# 合并指定分支到当前分支 
git merge [branch]   
# 选择一个commit,合并进当前分支 
git cherry-pick [commit]   
# 删除分支 
git branch -d [branch-name]   
# 删除远程分支 
git push origin --delete [branch-name] 
git branch -dr [remote/branch]

标签

# 列出所有tag
git tag  
# 新建一个tag在当前commit
git tag [tag] 
# 新建一个tag在指定commit
git tag [tag] [commit]
# 删除本地tag
git tag -d [tag]   
# 删除远程tag 
git push origin :refs/tags/[tagName]   
# 查看tag信息 
git show [tag]   
# 提交指定tag 
git push [remote] [tag]   
# 提交所有tag 
git push [remote] --tags   
# 新建一个分支,指向某个tag 
git checkout -b [branch] [tag]

查看信息

# 显示有变更的文件
git status 
# 显示当前分支的版本历史
git log 
# 显示commit历史,以及每次commit发生变更的文件 
git log --stat
# 搜索提交历史,根据关键词
git log -S [keyword]
# 显示某个commit之后的所有变动,每个commit占据一行 
git log [tag] HEAD --pretty=format:%s   
# 显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件 
git log [tag] HEAD --grep feature   
# 显示某个文件的版本历史,包括文件改名 
git log --follow [file] 
git whatchanged [file]   
# 显示指定文件相关的每一次diff 
git log -p [file]   
# 显示过去5次提交 
git log -5 --pretty --oneline   
# 显示所有提交过的用户,按提交次数排序 
git shortlog -sn   
# 显示指定文件是什么人在什么时间修改过 
git blame [file]   
# 显示暂存区和工作区的差异 
git diff   
# 显示暂存区和上一个commit的差异 
git diff --cached [file]   
# 显示工作区与当前分支最新commit之间的差异
git diff HEAD  
# 显示两次提交之间的差异
git diff [first-branch]...[second-branch]
# 显示今天你写了多少行代码
git diff --shortstat "@{0 day ago}"
# 显示某次提交的元数据和内容变化
git show [commit]  
# 显示某次提交发生变化的文件 
git show --name-only [commit]   
# 显示某次提交时,某个文件的内容 
git show [commit]:[filename]   
# 显示当前分支的最近几次提交 
git reflog

远程同步

# 下载远程仓库的所有变动
git fetch [remote] 
# 显示所有远程仓库
git remote -v 
# 显示某个远程仓库的信息
git remote show [remote]
# 增加一个新的远程仓库,并命名
git remote add [shortname] [url]   
# 取回远程仓库的变化,并与本地分支合并
git pull [remote] [branch]
# 上传本地指定分支到远程仓库
git push [remote] [branch]
# 强行推送当前分支到远程仓库,即使有冲突
git push [remote] --force
# 推送所有分支到远程仓库
git push [remote] --all

撤销

# 恢复暂存区的指定文件到工作区
git checkout [file]
# 恢复某个commit的指定文件到暂存区和工作区 
git checkout [commit] [file] 
# 恢复暂存区的所有文件到工作区
git checkout .
# 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
git reset [file] 
# 重置暂存区与工作区,与上一次commit保持一致
git reset --hard
# 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
git reset [commit]
# 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
git reset --hard [commit]   
# 重置当前HEAD为指定commit,但保持暂存区和工作区不变 
git reset --keep [commit]   
# 新建一个commit,用来撤销指定commit 
# 后者的所有变化都将被前者抵消,并且应用到当前分支 
git revert [commit]   
# 暂时将未提交的变化移除,稍后再移入 
git stash 
git stash pop

参考文献

参考文献

]]>
1 /index.php/archives/591/#comments /index.php/feed/archives/591/
【记录】MySQL OCP认证 学习记录 /index.php/archives/587/ /index.php/archives/587/ Sat, 03 Apr 2021 22:27:00 +0800 小渔
[button color="info" icon="" url="" type="round"]题库下库[/button]

]]>
0 /index.php/archives/587/#comments /index.php/feed/archives/587/
【小渔】小米路由3硬改适配Openwrt日记 /index.php/archives/515/ /index.php/archives/515/ Sat, 20 Mar 2021 11:23:00 +0800 小渔 小米路由3硬改适配Openwrt日记

准备工作

1.mt7620a_xiaomi_miwifi-r3mi.dts

文件存放路径:/lede/target/linux/ramips/dts

2.02_network

文件存放路径:/lede/target/linux/ramips/mt7620/base-files/etc/board.d

3.mt7620.mk

文件存放路径:/lede/target/linux/ramips/image

开始

订正源码

mt7620a_xiaomi_miwifi-r3mi.dts

/dts-v1/;

#include "mt7620a.dtsi"

#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>

/ {
    compatible = "xiaomi,miwifi-r3mi", "ralink,mt7620a-soc";
    model = "Xiaomi Mi Router R3Mi";

    aliases {
        led-boot = &led_blue;
        led-failsafe = &led_blue;
        led-running = &led_blue;
        led-upgrade = &led_blue;
        label-mac-device = &ethernet;
    };

    chosen {
        bootargs = "console=ttyS0,115200";
    };

    leds {
        compatible = "gpio-leds";

        led_blue: blue {
            label = "miwifi-mini:blue:status";
            gpios = <&gpio1 0 GPIO_ACTIVE_LOW>;
            default-state = "on";
        };

        yellow {
            label = "miwifi-mini:yellow:status";
            gpios = <&gpio1 2 GPIO_ACTIVE_LOW>;
        };

        red {
            label = "miwifi-mini:red:status";
            gpios = <&gpio1 5 GPIO_ACTIVE_LOW>;
        };
    };

    keys {
        compatible = "gpio-keys";

        reset {
            label = "reset";
            gpios = <&gpio1 6 GPIO_ACTIVE_HIGH>;
            linux,code = <KEY_RESTART>;
        };
    };
};

&gpio0 {
    status = "okay";
};

&gpio1 {
    status = "okay";
};

&gpio2 {
    status = "okay";
};

&spi0 {
    status = "okay";

    flash@0 {
        compatible = "jedec,spi-nor";
        reg = <0>;
        spi-max-frequency = <10000000>;

        partitions {
            compatible = "fixed-partitions";
            #address-cells = <1>;
            #size-cells = <1>;

            partition@0 {
                label = "u-boot";
                reg = <0x0 0x30000>;
            };

            partition@30000 {
                label = "u-boot-env";
                reg = <0x30000 0x10000>;
                read-only;
            };

            factory: partition@40000 {
                label = "factory";
                reg = <0x40000 0x10000>;
                read-only;
            };

            partition@50000 {
                compatible = "denx,uimage";
                label = "firmware";
                reg = <0x50000 0xf80000>;
            };

            partition@fd0000 {
                label = "crash";
                reg = <0xfd0000 0x10000>;
            };

            partition@fe0000 {
                label = "reserved";
                reg = <0xfe0000 0x10000>;
                read-only;
            };

            partition@ff0000 {
                label = "Bdata";
                reg = <0xff0000 0x10000>;
            };
        };
    };
};

&ehci {
    status = "okay";
};

&ohci {
    status = "okay";
};

&ethernet {
    pinctrl-names = "default";
    pinctrl-0 = <&ephy_pins>;

    mtd-mac-address = <&factory 0x28>;

    mediatek,portmap = "llllw";
};

&wmac {
    ralink,mtd-eeprom = <&factory 0x0>;
    pinctrl-names = "default";
    pinctrl-0 = <&pa_pins>;
};

&pcie {
    status = "okay";
};

&pcie0 {
    mt76@0,0 {
        reg = <0x0000 0 0 0 0>;
        mediatek,mtd-eeprom = <&factory 0x8000>;
        ieee80211-freq-limit = <5000000 6000000>;
    };
};

&state_default {
    gpio {
        groups = "i2c", "rgmii1";
        function = "gpio";
    };
};

02_network

xiaomi,miwifi-r3)
    ucidef_add_switch "switch0" \
        "1:lan" "4:lan" "0:wan" "6@eth0"
    ;;
    xiaomi,miwifi-r3mi)
    ucidef_add_switch "switch0" \
        "1:lan" "4:lan" "0:wan" "6@eth0"
    ;;

mt7620.mk

define Device/xiaomi_miwifi-mini
  SOC := mt7620a
  IMAGE_SIZE := 15872k
  DEVICE_VENDOR := Xiaomi
  DEVICE_MODEL := MiWiFi Mini
  DEVICE_PACKAGES := kmod-mt76x2 kmod-usb2 kmod-usb-ohci
  SUPPORTED_DEVICES += miwifi-mini
endef
TARGET_DEVICES += xiaomi_miwifi-mini

define Device/xiaomi_miwifi-r3mi
  SOC := mt7620a
  IMAGE_SIZE := 15872k
  DEVICE_VENDOR := Xiaomi
  DEVICE_MODEL := Mi Router R3Mi
  DEVICE_PACKAGES := kmod-mt76x2 kmod-usb2 kmod-usb-ohci
  SUPPORTED_DEVICES += miwifi-r3mi
endef
TARGET_DEVICES += xiaomi_miwifi-r3mi

define Device/xiaomi_miwifi-r3
  SOC := mt7620a
  BLOCKSIZE := 128k
  PAGESIZE := 2048
  KERNEL_SIZE := 4096k
  IMAGE_SIZE := 32768k
  UBINIZE_OPTS := -E 5
  IMAGES += kernel1.bin rootfs0.bin
  IMAGE/kernel1.bin := append-kernel | check-size
  IMAGE/rootfs0.bin := append-ubi | check-size
  IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
  DEVICE_VENDOR := Xiaomi
  DEVICE_MODEL := Mi Router R3
  DEVICE_PACKAGES := kmod-mt76x2 kmod-usb2 kmod-usb-ohci uboot-envtools
endef
TARGET_DEVICES += xiaomi_miwifi-r3

第一次编译

[scode type="red"]
故障内容如下:

  1. 2.4Ghz 获取IP过慢,且5Ghz无法正常驱动
  2. 启动过程中黄灯未常亮,而是蓝灯闪烁启动
  3. 固件网页设置中,无法正常识别到5Ghz无线网卡,且一网卡驱动不上,修改时显示为2.4Ghz无线网卡,怀疑是驱动混乱
    [/scode]

第一次尝试解决

1.[scode type="blue"]

xiaomi,miwifi-r3mi|\
xiaomi,miwifi-r3)
    ucidef_add_switch "switch0" \
        "1:lan" "4:lan" "0:wan" "6@eth0"
    ;;

[/scode]
2.[scode type="blue"]

define Device/xiaomi_miwifi-r3mi
  SOC := mt7620a
  IMAGE_SIZE := 16064k
  DEVICE_VENDOR := Xiaomi
  DEVICE_MODEL := Mi Router R3Mi
  DEVICE_PACKAGES := kmod-mt76x2 kmod-usb2 kmod-usb-ohci uboot-envtools
endef
TARGET_DEVICES += xiaomi_miwifi-r3mi    

[/scode]
3.[scode type="blue"]

/dts-v1/;

#include "mt7620a.dtsi"

#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>

/ {
    compatible = "xiaomi,miwifi-r3mi", "ralink,mt7620a-soc";
    model = "Xiaomi Mi Router R3Mi";

    aliases {
        led-boot = &led_red;
        led-failsafe = &led_yellow;
        led-running = &led_blue;
        led-upgrade = &led_yellow;
        label-mac-device = &ethernet;
    };

    chosen {
        bootargs = "console=ttyS0,115200";
    };

    leds {
        compatible = "gpio-leds";

        led_blue: blue {
            label = "miwifi-mini:blue:status";
            gpios = <&gpio1 0 GPIO_ACTIVE_LOW>;
            default-state = "on";
        };

        led_yellow: yellow {
            label = "miwifi-mini:yellow:status";
            gpios = <&gpio1 2 GPIO_ACTIVE_LOW>;
        };

        led_red: red {
            label = "miwifi-mini:red:status";
            gpios = <&gpio1 5 GPIO_ACTIVE_LOW>;
        };
    };

    keys {
        compatible = "gpio-keys";

        reset {
            label = "reset";
            gpios = <&gpio1 6 GPIO_ACTIVE_HIGH>;
            linux,code = <KEY_RESTART>;
        };
    };
};

&gpio0 {
    status = "okay";
};

&gpio1 {
    status = "okay";
};

&gpio2 {
    status = "okay";
};

&spi0 {
    status = "okay";

    flash@0 {
        compatible = "jedec,spi-nor";
        reg = <0>;
        spi-max-frequency = <10000000>;

        partitions {
            compatible = "fixed-partitions";
            #address-cells = <1>;
            #size-cells = <1>;

            partition@0 {
                label = "u-boot";
                reg = <0x0 0x30000>;
            };

            partition@30000 {
                label = "u-boot-env";
                reg = <0x30000 0x10000>;
                read-only;
            };

            factory: partition@40000 {
                label = "factory";
                reg = <0x40000 0x10000>;
                read-only;
            };

            partition@50000 {
                compatible = "denx,uimage";
                label = "firmware";
                reg = <0x50000 0xf80000>;
            };

            partition@fd0000 {
                label = "crash";
                reg = <0xfd0000 0x10000>;
            };

            partition@fe0000 {
                label = "reserved";
                reg = <0xfe0000 0x10000>;
                read-only;
            };

            partition@ff0000 {
                label = "Bdata";
                reg = <0xff0000 0x10000>;
            };
        };
    };
};

&ehci {
    status = "okay";
};

&ohci {
    status = "okay";
};

&ethernet {
    pinctrl-names = "default";
    pinctrl-0 = <&ephy_pins>;

    mtd-mac-address = <&factory 0x28>;

    mediatek,portmap = "llllw";
};

&wmac {
    ralink,mtd-eeprom = <&factory 0x0>;
    pinctrl-names = "default";
    pinctrl-0 = <&pa_pins>;
};

&pcie {
    status = "okay";
};

&pcie0 {
    mt76@0,0 {
        reg = <0x0000 0 0 0 0>;
        mediatek,mtd-eeprom = <&factory 0x8000>;
        ieee80211-freq-limit = <5000000 6000000>;
    };
};

&state_default {
    gpio {
        groups = "i2c", "rgmii1";
        function = "gpio";
    };
};  

[/scode]

第二次编译

./scripts/feeds update -a
./scripts/feeds install -a
make menuconfig
make -j1 V=sk

第二次尝试解决

1.[scode type="yellow"]

/dts-v1/;

#include "mt7620a.dtsi"

#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>

/ {
    compatible = "xiaomi,miwifi-r3mi", "ralink,mt7620a-soc";
    model = "Xiaomi Mi Router R3Mi";

    aliases {
        led-failsafe = &led_red;
        led-running = &led_yellow;
        led-upgrade = &led_blue;
        label-mac-device = &ethernet;
    };

    chosen {
        bootargs = "console=ttyS0,115200";
    };

    leds {
        compatible = "gpio-leds";

        led_blue: blue {
            label = "miwifi-mini:blue:status";
            gpios = <&gpio1 0 GPIO_ACTIVE_LOW>;
            default-state = "on";
        };

        led_yellow: yellow {
            label = "miwifi-mini:yellow:status";
            gpios = <&gpio1 2 GPIO_ACTIVE_LOW>;
        };

        led_red: red {
            label = "miwifi-mini:red:status";
            gpios = <&gpio1 5 GPIO_ACTIVE_LOW>;
        };
    };

    keys {
        compatible = "gpio-keys";

        reset {
            label = "reset";
            gpios = <&gpio1 6 GPIO_ACTIVE_HIGH>;
            linux,code = <KEY_RESTART>;
        };
    };
};

&gpio0 {
    status = "okay";
};

&gpio1 {
    status = "okay";
};

&gpio2 {
    status = "okay";
};

&spi0 {
    status = "okay";

    flash@0 {
        compatible = "jedec,spi-nor";
        reg = <0>;
        spi-max-frequency = <10000000>;

        partitions {
            compatible = "fixed-partitions";
            #address-cells = <1>;
            #size-cells = <1>;

            partition@0 {
                label = "u-boot";
                reg = <0x0 0x30000>;
            };

            partition@30000 {
                label = "u-boot-env";
                reg = <0x30000 0x10000>;
                read-only;
            };

            factory: partition@40000 {
                label = "factory";
                reg = <0x40000 0x10000>;
                read-only;
            };

            partition@50000 {
                compatible = "denx,uimage";
                label = "firmware";
                reg = <0x50000 0xf80000>;
            };

            partition@fd0000 {
                label = "crash";
                reg = <0xfd0000 0x10000>;
            };

            partition@fe0000 {
                label = "reserved";
                reg = <0xfe0000 0x10000>;
                read-only;
            };

            partition@ff0000 {
                label = "Bdata";
                reg = <0xff0000 0x10000>;
            };
        };
    };
};

&ehci {
    status = "okay";
};

&ohci {
    status = "okay";
};

&ethernet {
    pinctrl-names = "default";
    pinctrl-0 = <&ephy_pins>;

    mtd-mac-address = <&factory 0x28>;

    mediatek,portmap = "llllw";
};

&wmac {
    ralink,mtd-eeprom = <&factory 0x0>;
    pinctrl-names = "default";
    pinctrl-0 = <&pa_pins>;
};

&pcie {
    status = "okay";
};

&pcie0 {
    mt76@0,0 {
        reg = <0x0000 0 0 0 0>;
        mediatek,mtd-eeprom = <&factory 0x8000>;
        ieee80211-freq-limit = <5000000 6000000>;
    };
};

&state_default {
    gpio {
        groups = "i2c", "rgmii1";
        function = "gpio";
    };
};

[/scode]
2.
[scode type="yellow"]
删除

xiaomi,miwifi-r3mi)
    wan_mac=$(mtd_get_mac_binary factory 0x28)
    lan_mac=$(macaddr_setbit_la "$wan_mac")
    ;;

[/scode]
3.[scode type="yellow"]

define Device/xiaomi_miwifi-r3mi
  SOC := mt7620a
  IMAGE_SIZE := 16064k
  DEVICE_VENDOR := Xiaomi
  DEVICE_MODEL := Mi Router R3Mi
  DEVICE_PACKAGES := kmod-mt76x2 kmod-usb2 kmod-usb-ohci uboot-envtools
endef
TARGET_DEVICES += xiaomi_miwifi-r3mi

[/scode]

第三次编译

./scripts/feeds update -a
./scripts/feeds install -a
make menuconfig
make -j1 V=sk

第三次尝试解决

考虑到可能是乌班图系统问题故更换系统为乌班图20.10

[button color="info" <a href="" type="round"]镜像下载[/button]

安装环境

sudo apt-get install -y gcc g++ binutils patch bzip2 flex bison make autoconf gettext texinfo unzip sharutils subversion libncurses5-dev ncurses-term zlib1g-dev gawk asciidoc zlib1g-dev git git-man liberror-perl libsigsegv2 vim build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev zlib1g-dev patch python3 python2.7 unzip zlib1g-dev lib32gcc-s1 libc6-dev-i386 subversion flex uglifyjs git gcc-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0-dev xmlto qemu-utils upx-ucl libelf-dev autoconf automake libtool autopoint device-tree-compiler g++-multilib antlr3 gperf wget curl swig rsync subversion gawk

sudo apt install -y gcc g++ binutils patch bzip2 flex bison make gettext texinfo unzip sharutils libncurses5-dev ncurses-term zlib1g-dev asciidoc autoconf libssl-dev build-essential subversion git-core libncurses5-dev zlib1g-dev gawk flex quilt libssl-dev xsltproc libxml-parser-perl mercurial bzr ecj cvs unzip  zlib1g zlib1g-dev 

拉取源码

git clone https://github.com/coolsnowwolf/lede
cd lede
./scripts/feeds clean
./scripts/feeds update -a
./scripts/feeds install -a

安装宝塔

wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh

开防火墙

sudo ufw allow 8888
#允许外部访问8888端口(tcp/udp)

上传历史文件


[button color="info" <a href="" type="round"]工程文件下载[/button]

开始编译

cd /lede
make menuconfig

遇到报错 Build dependency: Please install GNU 'awk' Prerequisite check failed. Use FORCE=1 to override. make: *** [/home/yuos/lede/include/toplevel.mk:174:staging_dir/host/.prereq-build] 错误 1

sudo apt-get install subversion gawk
#问题解决
make menuconfig
/*选择配置*/
make -j8 download V=s
#下载dl库(国内请尽量全局科学上网)

编译成功


[button color="info" <a href="" type="round"]固件下载[/button]

建议搭配魔改版信号文件食用效果更佳

[button color="info" <a href="" type="round"]信号文件下载[/button]

测试图

]]>
10 /index.php/archives/515/#comments /index.php/feed/archives/515/
[pjialin/py12306]一个带Web界面的开源抢票程序 /index.php/archives/498/ /index.php/archives/498/ Tue, 09 Feb 2021 22:38:00 +0800 小渔 正文

项目地址

Github

安装环境

我这里演示用的是Centos7

截图

Web 管理页面
下单成功

安装环境

#安装编译相关工具
su root
#然后输入密码
yum -y groupinstall "Development tools"
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
yum install libffi-devel -y
#安装环境,下载安装包解压
cd ~
#回到用户目录
wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz
tar -xvJf  Python-3.7.0.tar.xz
mkdir /usr/local/python3 
#创建编译安装目录,编译安装
cd Python-3.7.0
./configure --prefix=/usr/local/python3
make && make install
#创建软连接
ln -s /usr/local/python3/bin/python3 /usr/local/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/local/bin/pip3
#验证是否成功
python3 -V
pip3 -V

克隆源码

git clone https://github.com/pjialin/py12306

安装依赖

cd py12306
pip3 install -r requirements.txt

配置程序

cp env.py.example env.py
vim env.py

自动打码

(若快已停止服务,目前只能设置free打码模式) free 已对接到打码共享平台,https://py12306-helper.pjialin.com,欢迎参与分享

语音通知

语音验证码使用的是阿里云 API 市场上的一个服务商,需要到 https://market.aliyun.com/products/56928004/cmapi026600.html 购买后将 appcode 填写到配置中

启动前测试

目前提供了一些简单的测试,包括用户账号检测,乘客信息检测,车站检测等

开始测试 -t

python main.py -t
测试通知消息 (语音, 邮件) -t -n

#默认不会进行通知测试,要对通知进行测试需要加上 -n 参数 

python main.py -t -n

运行程序

python main.py

参数列表

-t 测试配置信息
-t -n 测试配置信息以及通知消息
-c 指定自定义配置文件位置

分布式集群

集群依赖于 redis,目前支持情况

单台主节点多个子节点同时运行
主节点宕机后自动切换提升子节点为主节点
主节点恢复后自动恢复为真实主节点
配置通过主节点同步到所有子节点
主节点配置修改后无需重启子节点,支持自动更新
子节点消息实时同步到主节点
使用

将配置文件的中 CLUSTER_ENABLED 打开即开启分布式

目前提供了一个单独的子节点配置文件 env.slave.py.example 将文件修改为 env.slave.py, 通过 python main.py -c env.slave.py 即可快速启动

]]>
2 /index.php/archives/498/#comments /index.php/feed/archives/498/
【小渔】PsGetSid v1.45直接在注册表中找到用户及其对应的sid /index.php/archives/451/ /index.php/archives/451/ Tue, 15 Dec 2020 15:27:00 +0800 小渔 正文

资料来源:

1.https://docs.microsoft.com/en-us/sysinternals/downloads/psgetsid
2.https://ss64.com/nt/psgetsid.html

介绍

PsGetsid允许您将SID转换为其显示名称,反之亦然。它适用于内置帐户,域帐户和本地帐户。

安装

只需将PsGetSid复制到您的可执行路径,然后键入psgetsid

用法

用法:psgetsid [\计算机[,计算机[,...] | @file ] [-u用户名[-p密码]]] [帐户| SID]

参数 描述
-u 指定用于登录到远程计算机的可选用户名。
-p 指定用户名的可选密码。如果您忽略此密码,系统将提示您输入隐藏密码。
帐户 PsGetSid将报告指定的用户帐户而不是计算机的SID。
SID PsGetSid将报告指定SID的帐户。
电脑 指示PsGetSid在远程计算机或指定的计算机上执行命令。如果省略计算机名称,则PsGetSid在本地系统上运行命令,并且如果指定通配符(\ *),则PsGetSid在当前域中的所有计算机上运行命令。
@文件 PsGetSid将在文件中列出的每台计算机上执行命令。

语法

psgetsid [\\computer[,computer[,...] | @get_file] [-u user [-p passwd]]] [account|SID]
#psgetsid [\\计算机[,计算机[,...] | @ get_file ] [-u用户[-p passwd ]]] [帐户| SID ]

选项:计算机
列出文件的远程计算机。默认值=本地系统
@ get_file 获取指定的文本文件中列出的每台计算机的SID。
-p passwd 指定用户密码(可选)。作为明文传递。
如果省略,将提示您输入隐藏密码。
-u用户
指定用于登录到远程计算机的用户名(可选)。帐户 的用户帐户来解析对用户SID的SID 的用户帐户小号ystem标识entifier
-accepteula禁止许可证对话框的显示。
如果要运行的帐户在要查询的计算机上没有管理特权,请指定用户名。
首次启动时,PsGetSid将创建注册表项
HKCU \ Software \ Sysinternals \ PsGetSid \ EulaAccepted = 0x01

示例:

获取\ workstation64的SID:

psgetsid \workstation64

获取域的域SID:Niamod

psgetsid Niamod

获取当前登录用户的SID

psgetsid %username%

[collapse status="true" title="说在后面"]

后记

或者可以这样子,单独下载PsGetsid64.exe ,然后

PsGetsid64.exe %username%
#嘿嘿,突发奇想探索的

[/collapse]

工具下载

下载PsTools (2.7MB)
下载PsGetsid64.exe(0.3MB)

]]>
18 /index.php/archives/451/#comments /index.php/feed/archives/451/
【小渔】Centos使用Cloudreve搭建自己的网盘系统 /index.php/archives/439/ /index.php/archives/439/ Sat, 05 Dec 2020 22:35:00 +0800 小渔 正文

安装

Cloudreve

#解压获取到的主程序
tar -zxvf cloudreve_VERSION_OS_ARCH.tar.gz

# 赋予执行权限
chmod +x ./cloudreve

# 启动 Cloudreve
./cloudreve

配置

Cloudreve 在首次启动时,会创建初始管理员账号,请注意保管管理员密码,此密码只会在首次启动时出现。如果您忘记初始管理员密码,需要删除同级目录下的cloudreve.db,重新启动主程序以初始化新的管理员账户。
Cloudreve 默认会监听5212端口。你可以在浏览器中访问http://服务器IP:5212进入 Cloudreve
以上步骤操作完后,最简单的部署就完成了。你可能需要一些更为具体的配置,才能让Cloudreve更好的工作,具体流程请参考下面的配置流程。

更改默认端口

以9981端口为例

 vim conf.ini

完整代码:

[System]
Mode = master
Listen = :9981
SessionSecret = FGxxNj5wxBOMxxxxxxxxxxxxxxxxxxUHBInYk1cZa3NbtmZh6xxxxxxxxecbiDyk
HashIDSalt = NxxxbySJxx0UfxxxxxxxxxxxxxxxAUOFKdkZ0lIdGxxxxxxxxxxxxxxxxxxxxxxx

进程守护

# 编辑配置文件
vim /etc/systemd/system/cloudreve.service

按下 i 进入编辑模式,复制以下内容并粘贴到 SSH,XShell 的快捷键是 Shift + Insert ( 键盘右上角偏左边 )

[Unit]
Description=Cloudreve
[Service]
User=root
WorkingDirectory=/www/wwwroot/你的域名/
LimitNOFILE=4096
PIDFile=/var/run/cloudreve/server.pid
ExecStart=/www/wwwroot/你的域名/cloudreve
Restart=on-failure
StartLimitInterval=600
[Install]
WantedBy=multi-user.target

然后按 Esc,接着输入 wq 保存,如果提示保存失败就试试 wq! 注意 ! 是英文的感叹号不是中文的!感叹号。
接着输入以下命令:

systemctl daemon-reload

服务就创建成功了,接下来启动服务:

systemctl start cloudreve

将服务设置为开机启动

systemctl enable cloudreve

如果要停止运行客户端,只需要输入

systemctl stop cloudreve

如果要禁止开机启动,输入

systemctl disable cloudreve

然后重启服务器检验

shutdown -r now

校验

成功:

]]>
0 /index.php/archives/439/#comments /index.php/feed/archives/439/