精华内容
下载资源
问答
  • 1.KK版本上(4.4)如何隐藏有SIM卡1,2标记,如何去掉状态栏G、3G图标 2.L版本上(5.0)如何增加有SIM卡1,2标记 3.特别的,目前M版本不支持该功能。 一 KK版本上(4.4) 1.1如何隐藏有SIM卡1,2标记 KK上默认是...
    1.KK版本上(4.4)如何隐藏有SIM卡1,2标记,如何去掉状态栏G、3G图标
     
    2.L版本上(5.0)如何增加有SIM卡1,2标记
     
    3.特别的,目前M版本不支持该功能。
     

    一  KK版本上(4.4) 

    1、如何隐藏有SIM卡1,2标记

    KK上默认是显示1,2卡标识的。

    如果隐藏它们,在文件SignalClusterView.java上由mMobileSlotIndicator变量控制

    将mMobileSlotIndicator出现的地方屏蔽掉就可以 

    2、如何去掉状态栏G、3G图标

    去掉方法很简单,就是把这个View隐藏就行了,具体修改如下
    SignalClusterView.java (frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar)

    apply():

    ……

    //hide network icon  begin       

    /* int state = SIMHelper.getSimIndicatorStateGemini(i);//hide network icon

                    if (!mIsAirplaneMode

                            && SIMHelper.isSimInserted(i)

                            && PhoneConstants.SIM_INDICATOR_LOCKED != state

                            && PhoneConstants.SIM_INDICATOR_SEARCHING != state

                            && PhoneConstants.SIM_INDICATOR_INVALID != state

                            && PhoneConstants.SIM_INDICATOR_RADIOOFF != state) {

                        ……

                    } else {*/

                        mSignalNetworkType[i].setImageDrawable(null);

                        mSignalNetworkType[i].setVisibility(View.GONE);

                    //}

        //hide network icon  end     

       ……

    二 L版本上(5.0)如何增加有SIM卡1,2标记

    L版本5.0默认是没有显示的1.2卡标识的!

    如果要增加1,2标识,可按下面步骤添加:

       
    1、Signal_Cluster_View.xml

    <!-- M: Support "Default SIM Indicator". }@ -->
    <LinearLayout
    android:id="@+id/signal_cluster_combo"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    >
    <View
    android:layout_height="6dp"
    android:layout_width="6dp"
    android:visibility="invisible"
    />
    <!-- M: Support "Service Network Type on Statusbar". @{ -->
    <ImageView
    android:id="@+id/network_type"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:visibility="gone"
    />
    <!-- M: Support "Service Network Type on Statusbar". }@ -->
    <FrameLayout
    android:id="@+id/mobile_combo"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    >
    <ImageView
    android:id="@+id/mobile_signal"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    />
    <ImageView
    android:id="@+id/mobile_type"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    />
    <!-- add :mobile_slot_indicateor". }@ -->
    <ImageView
    android:id="@+id/mobile_slot_indicator"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    /> 

    </FrameLayout>
    </LinearLayout>

    <!-- the 2nd sim card start -->
    <View
    android:layout_height="1dp"
    android:layout_width="1dp"
    android:tag="spacer_2"
    android:visibility="gone"
    android:id="@+id/spacer_2"
    />
    <View
    android:layout_height="1dp"
    android:layout_width="1dp"
    android:visibility="invisible"
    />
    <LinearLayout
    android:id="@+id/signal_cluster_combo_2"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:tag="signal_cluster_combo_2"
    >
    <!-- M: Support "Service Network Type on Statusbar". @{ -->
    <ImageView
    android:id="@+id/network_type_2"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:visibility="gone"
    android:tag="network_type_2"
    />
    <!-- M: Support "Service Network Type on Statusbar". }@ -->
    <FrameLayout
    android:id="@+id/mobile_combo_2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:tag="mobile_combo_2"
    >
    <ImageView
    android:id="@+id/mobile_signal_2"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:tag="mobile_signal_2"
    />
    <ImageView
    android:id="@+id/mobile_type_2"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:tag="mobile_type_2"
    />
    <!-- add :mobile_slot_indicateor". }@ -->
    <ImageView
    android:id="@+id/mobile_slot_indicator_2"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    /> 

    </FrameLayout>
    </LinearLayout>
    <!-- the 2nd sim card end -->

     

    2、SignalClusterView.java
    文件添加

    // add

    private ImageView[] mMobileSlotIndicator;

    //add
    int[] slots_indicators=new int[]{R.drawable.sim1_indicator,R.drawable.sim2_indicator};
    // 图片sim1_indicator,sim2_indicator是你制作的sim1,sim2标识


    public SignalClusterView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    mSlotCount = SIMHelper.getSlotCount();
    ........
    // add
    mMobileSlotIndicator= new ImageView[mSlotCount];

    }

    onAttachedToWindow()那里
    //add
    for (int i = SIMHelper.SLOT_INDEX_DEFAULT ; i < mSlotCount; i++) {
    final int k = i + 1;
    if (i == SIMHelper.SLOT_INDEX_DEFAULT) {
    // load views for first SIM card


    mMobile[i] = (ImageView) findViewById(R.id.mobile_signal);
    mMobileGroup[i] = (ViewGroup) findViewById(R.id.mobile_combo);
    mMobileType[i] = (ImageView) findViewById(R.id.mobile_type);
    mSpacer[i] = findViewById(R.id.spacer);
    mSignalClusterCombo[i] = (ViewGroup) findViewById(R.id.signal_cluster_combo);
    /// M: Support "Service Network Type on Statusbar"
    mSignalNetworkType[i] = (ImageView) findViewById(R.id.network_type);

    //tdp add
    mMobileSlotIndicator[i] = (ImageView) findViewById(R.id.mobile_slot_indicator);
    } else {
    mMobile[i] = (ImageView) findViewWithTag("mobile_signal_" + k);
    mMobileGroup[i] = (ViewGroup) findViewWithTag("mobile_combo_" + k);
    mMobileType[i] = (ImageView) findViewWithTag("mobile_type_" + k);
    mSpacer[i] = findViewWithTag("spacer_" + k);
    mSignalClusterCombo[i] = (ViewGroup) findViewWithTag("signal_cluster_combo_" + k);
    /// M: Support "Service Network Type on Statusbar"
    mSignalNetworkType[i] = (ImageView) findViewWithTag("network_type_" + k);

    //tdp add
    mMobileSlotIndicator[i] = (ImageView) findViewWithTag("mobile_slot_indicator_"+k);
    }

    //add
    mMobileSlotIndicator[i].setImageDrawable(slots_indicators[i]);
    mMobileSlotIndicator[i].setVisibility(View.VISIBLE);
    }

    onDetachedFromWindow()那里
    //add 
    @Override
    protected void onDetachedFromWindow() {
    mVpn = null;
    mWifiGroup = null;
    mWifi = null;
    /// M: WifiActivityIcon
    mWifiActivity = null;

    for (int i = SIMHelper.SLOT_INDEX_DEFAULT; i < mSlotCount ; i++) {
    mMobileGroup[i] = null;
    mMobile[i] = null;
    mMobileType[i] = null;
    mSpacer[i] = null;
    //add
    mMobileSlotIndicator[i] = null;
    }

     

     

    展开全文
  • 密码学系列 - 双线性对

    千次阅读 2021-02-02 10:55:30
    双线性对是一种二元映射,它作为密码学算法的构造工具,在各区块链平台中广泛应用,...一个映射e,能将G₁和G₂中的两个元素映射为G₃中的一个元素,并且该映射满足线性。 设g₁, g₂分别是群G₁和G₂的元素,????是

    双线性对是一种二元映射,它作为密码学算法的构造工具,在各区块链平台中广泛应用,比如零知识证明、聚合签名等技术方案大多基于双线性对构造得来。

    线性映射

    一个函数f是线性的是指函数f满足可加性和齐次性,也就是:

    可加性:f(a)+f(b)=f(a+b)

    齐次性:f(ka)=kf(a)

    双线性映射

    和线性函数不同的点在于满足双线性的函数有两个输入,而且对这两个输入分别满足线性。

    一个映射e,能将G₁和G₂中的两个元素映射为G₃中的一个元素,并且该映射满足双线性。

    设g₁, g₂分别是群G₁和G₂的元素,𝑒是G₁×G₂→G₃的双线性映射,那么有:

    𝑒(ag₁, bg₂) = ab 𝑒(g₁ , g₂) = 𝑒(abg₁ , g₂) = 𝑒(g₁ , abg₂)

    𝑒(ag₁, bg₂) + 𝑒(cg₁, dg₂) = (ab+cd) 𝑒(g₁, g₂)

    双线性使得变量前面的系数可以灵活转化

    基于双线性对的密码算法

    三方一轮密钥协商

    三方一轮密钥协商是一种可以在一轮交互内完成三方的密钥协商的密钥协商协议,效率高于DH密钥协商。传统的DH密钥协商可以完成两两之间的密钥协商。虽然能够通过两两之间多轮协商完成三方之间的密钥协商,但是增加了通信复杂度。

    国密SM9算法

    基于身份的密码体制(IBE)是公钥密码学的一个研究方向,其特点是直接用标识用户身份的字符串作为公钥。大家熟悉的国密SM9算法就属于该类算法,这是目前国产密码算法中唯一一个基于双线性对的密码算法。

    SM9标识密码算法包括数字签名算法、密钥协商算法、加解密算法三部分。不同于传统签名算法的由用户随机选择私钥然后计算得到公钥的方式,SM9能够实现用户指定公钥,密钥生成中心通过公钥计算私钥。

    这样可以将一些有意义的字符串,例如身份证号码、邮箱地址等作为用户公钥,从而能在公钥中直接反应出用户信息,这也是标识密码(IBC)的含义。这样可以将一些有意义的字符串,例如身份证号码、邮箱地址等作为用户公钥,从而能在公钥中直接反应出用户信息,这也是标识密码(IBC)的含义。

    和一般签名验签不同的地方在于,密钥生成分为主密钥生成和用户密钥生成两部分,主私钥由密钥生成中心(KGC)保管。

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    BLS签名算法

    BLS签名是Boneh、Lynn和Shacham三人基于双线性映射构造的短签名方案,其特性之一就是能用于构造聚合签名。

    可以有效缩减PBFT类共识在区块头中存放的签名体积, 聚合签名只占 32 字节, 可以在区块中放更多笔的交易。

    MOV攻击

    又称MOV规约攻击,是Menezes、Okamoto和Vanstone三人的论文中提出的针对特殊椭圆曲线离散对数问题(ECDLP)的一种有效解法。通过双线性配对,将椭圆曲线上的离散对数问题规约成为某个乘法群上的离散对数问题,能够在亚指数步骤中计算ECDLP。

    MOV攻击并非能作用于全部的椭圆曲线,而是只能对参数满足一定条件的曲线进行攻击。这促使人们在选择椭圆曲线参数时更加谨慎,更加注重抗MOV攻击。

    例如国标《SM2椭圆曲线公钥密码算法》就充分重视了受到MOV攻击的可能性,不仅在第一部分《总则》中用附录A的部分篇幅介绍验证曲线参抗MOV攻击的方法,而且也在第五部分《参数定义》中给出了安全曲线的推荐参数。

    缺点: 计算开销较大

    配对函数并不那么高效, 验签时间相对于传统的ECDSA签名上升了两个数量级。

    BLS 签名验证的复杂度要比 ECDSA 高上一个数量级。在验证区块中 1000 笔交易的聚合签名时,仍需要进行 1000 次配对计算,这可能比使用 ECDSA 时(对 1000 个单独签名进行验证)还要慢。唯一的好处在于,可以在区块中放更多笔的交易,毕竟聚合签名只占 32 字节。

    曲线

    并非基于任何椭圆曲线都可以构造配对函数,对于能有效实现双线性对的椭圆曲线,称为配对友好曲线(pairing-friendly curves)。

    BN曲线

    不再安全, 2016年的研究(https://moderncrypto.org/mail-archive/curves/2016/000740.html)指出BN曲线配对在NFS数域筛算法的攻击下达不到宣称的安全等级(在新攻击方法下估计强度大约减少1/4)。

    BLS曲线

    BLS12_381(嵌入度为12的381位特征的BLS曲线, 128位安全级别), 零知识证明(zk-SNARK)的证明系统,主要是基于BLS12_381椭圆曲线上,实现了Groth16的零知识证明系统。

    名词解释

    DLP

    离散对数问题。例如在整数模11乘法群中容易计算5×5×5×5=9 mod 11,那么求几个5相乘的结果是9这个问题就是一个离散对数问题。当模数为很大的质数时,这个问题是困难的。

    ECDLP

    椭圆曲线离散对数问题。例如已知P、Q是两个椭圆曲线点,并且4个P相加得到Q,那么已知P和Q求解几个P相加得到Q的问题就是椭圆曲线离散对数问题。当选择的曲线满足一定要求时,该问题是困难的。

    参考文献:

    双线性对在密码学中的应用(上)

    双线性对在密码学中的应用(下)


    往期精彩回顾:
    区块链知识系列
    密码学系列
    共识系列
    公链调研系列
    以太坊系列
    EOS系列
    智能合约系列
    Token系列
    展开全文
  • MSP430G2553学习笔记

    千次阅读 2019-08-22 00:19:17
    MSP430G2553概述 • 低电源电压范围:1.8V 至 3.6V • 超低功耗 – 运行模式:230μA(在 1MHz 频率和 2.2V 电压 条件下) – 待机模式:0.5μA – 关闭模式(RAM 保持):0.1μ • 5 种节能模式 • 可在不到...

    MSP430G2553概述

    • 低电源电压范围:1.8V 至 3.6V
    • 超低功耗
    – 运行模式:230μA(在 1MHz 频率和 2.2V 电压 条件下)
    – 待机模式:0.5μA
    – 关闭模式(RAM 保持):0.1μ
    • 5 种节能模式
    • 可在不到 1μs 的时间里超快速地从待机模式唤醒
    • 16 位精简指令集 (RISC) 架构,62.5ns 指令周期时间
    • 基本时钟模块配置
    – 具有四种校准频率并高达 16MHz 的内部频率
    – 内部超低功耗低频 (LF) 振荡器
    – 32kHz 晶振
    – 外部数字时钟源
    • 两个 16 位 Timer_A,分别具有三个捕获/比较寄存器
    • 多达 24 个支持触摸感测的 I/O 引脚
    • 通用串行通信接口 (USCI)
    – 支持自动波特率检测的增强型通用异步收发器 (UART)
    – IrDA 编码器和解码器
    – 同步 SPI
    – I2C™
    • 用于模拟信号比较功能或者斜率模数 (A/D) 转换的 片载比较器
    • 带有内部基准、采样与保持以及自动扫描功能的 10位 200ksps 模数 (A/D) 转换器
    • 欠压检测器
    • 串行板上编程,无需外部编程电压,利用安全熔丝实现可编程代码保护
    • 具有两线制 (Spy-Bi-Wire) 接口的片上仿真逻辑电路

    系统时钟

    MSP430G2553有三种时钟的功能:
    MCLK:
    主时钟,专门为CPU运行提供的时钟
    SMCLK:
    子系统时钟,专为一些需要高速时钟的片内外设提供服务,比如定时器和ADC采样
    ACLK:
    辅助时钟,供给那些只需要低频时钟的片内外设,比如LCD控制器

    //将MSP430G2553的时钟设置为:MCLK和SMCLK均为16MHz,ACLK设为内部低频振荡器
    DCOCTL=CALDCO_16MHz;   //调取出厂校准后储存在Flash中的参数
    BCSCTL1=CALBC1_16MHz;
    BCSCTL3 |=LFXT1S1;      //设为内部低频振荡器
    //将ACLK设为使用32.768KHz晶振且4分频
    BCSCTL |=DIVA_2;
    //将MSP430G2553的时钟设置为:MCLK为4MHz,SMCLK为2MHz,ACLK设为使用32.768KHz晶振 
    DCOCTL=CALDCO_8MHz;   //先设置为8MHz 
    BCSCTL1=CALBC1_8MHz;
    BCSCTL2 |=DIVM_1+DIVS_2;   //再对MCLK2分频,SMCLK4分频 
    

    GPIO与中断功能

    I/O口方向寄存器:PxDIR
    I/O口输入寄存器:PxIN
    I/O口输出寄存器:PxOUT
    控制内部上、下拉电阻寄存器:PxREN
    MSP430G2553单片机的P1口与P2口带中断
    是否允许I/O中断寄存器:PxIE
    中断标志位寄存器:PxIFG
    中断边沿选择寄存器:PxIES
    MSP430G2553单片机是写位操作,例子如下:

    //将P1.0置1,P1.1置0,P1.2取反,不影响其他位
    P1OUT |=0X01;    //按位"或",相当于置1
    P1OUT &=~0x02;   //取反后再按位"与",相当于置0
    P1OUT ^=0x04//按位"异或",相当于取反
    //将P1.0,P1.1,P1.2均置1,不影响其他位
    P1OUT |=BIT0+BIT1+BIT2;  //可用加法进行批量设置 
    

    在实际编程中,可以用宏定义来消除“线与”逻辑带来的不便。例如,将P1.0设为“线与”逻辑输出,可以用如下宏定义来描述:

    #define P10_ON P1DIR &=~BIT0                 //I/O设为输入, 相当于"线与"输出1
    #define P10_OFF P1DIR |=BIT0;P1OUT &=~BITO   //I/O设为输出,输出0 
    

    MSP430G2553使用外部中断步骤如下:
    1:通过PxDIR将I/O口方向设为输入
    2:写PxIES可决定中断的边沿是上升沿、下降沿或两种情况均中断
    3:如果是机械按键输入,可以通过PxREN启用内部上(下)拉电阻,根据按键的接法,设定PxOUT决定最终是上拉电阻还是下拉电阻
    4:配置PxIE寄存器可开启I/O中断,“_enable_interrupts();”可开启总中断
    5:在中断子函数中,通过if语句查询具体中断的I/O口,如果是机械按键输入,还需要消抖代码
    6:根据具体I/O口的输入,编写事件处理函数
    7:退出中断前,使用“PxIFG=0;”来清除I/O中断标志位

    Timer_A定时器

    MSP430G2553单片机的Timer_A模块的整体构造包括1个16位定时器和3个捕获/比较模块。
    由于捕获模块Caputre和比较模块Comparator共用了TACCRx寄存器,所以捕获模块Caputre的功能是写TACCRx,而比较模块Comparator的功能是读TACCRx模块,所以捕获和比较不能同时使用。CAP寄存器位用于选择捕获/比较工作模式,CAP=0为比较,CAP=1为捕获。
    CCRx可以选择检测上升沿或下降沿,或者都检测。CCRx用于测定信号脉宽时,只需要分别记录上升沿时刻和下降沿时刻,两个时刻相减就是脉宽;而测量频率时,连续记录两次上升时刻,相减就是周期。
    51单片机外部中断法与捕获法的区别:
    外部中断法:边沿被检测——触发中断——进中断子函数——读取定时器值,这时读取的定时器值和实际边沿的时刻有较大的误差
    捕获法:边沿被检测——立刻读取定时器值TAR并锁存到CCRx模块内TACCRx寄存器——触发中断——什么时候读TACCRx都可以。这样的误差延时就仅有10ns级
    比较模式用于设定定时器的周期
    比较模块的OUTMODx设置。普通PWM时,超前PWM(上升沿在主定时器0位置)配置模式7,滞后PWM配置模式3;带死区PWM时,两路输出都必须开启,并且一路模式为6,另一路必须为2。
    注意:虽然每个Timer_A模块有3个捕获/比较模块(CCR0/1/2),但是CCR0的寄存器TACCR0已被用于设定PWM频率,因此用CCR1和CCR2最多能生成2路独立的PWM信号。CCR0的比较值TACCR0用于设定周期,CCR1/2的比较值TACCR1/2用于设定占空比。

    WDT定时器

    WDT(Watch Dog Timer)俗称看门狗
    复位引脚被设置成NMI不可屏蔽中断来使用,这个中断和普通I/O外部中断一样,有中断子函数;其区别是NMI中断不需要开总中断使能(因为不可屏蔽,所以优先级最高),NMI每次中断后会自动关闭NMI中断使能。

    //当看门狗被设定为1s定时复位,那么"喂狗"的代码是这样的:
    WDTCTL=WDT_ARST_1000;   //该宏定义包含了喂狗,并重新设定看门狗定时值的代码 
    

    变量知识点:
    全局变量:
    具有全局作用域,全局变量只需在一个源文件中定义,就可以作用于所有的源文件。
    静态全局变量:
    具有全局作用域,它与全局变量的区别在于如果程序包含多个文件的话,它作用于定义它的文件里,不能作用到其它文件里,即被 static 关键字修饰过的变量具有文件作用域。
    局部变量:
    具有局部作用域,它是自动对象(auto),它在程序运行期间不是一直存在,而是只在函数执行期间存在,函数的一次调用执行结束后,变量被撤销,其所占用的内存也被收回。
    静态局部变量:
    具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在。

    int a = 0; //全局变量
    static int b=0;//静态全局变量
    main() 
    { 
    int c; //局部变量
    static int d;//静态局部变量 
    }
    

    状态机知识点:
    状态机也叫有限状态机,简称状态机。状态机的概念来源于时序逻辑电路,又细分为Mealy状态机和Moore状态机,两者的区别在于是否根据状态就能得出输出结果。
    单片机中借用了这两种状态机的思想,引申出“状态中判断事件”和“事件中查询状态”两种单片机状态的编程方法。
    状态中判断事件:
    这种方法类似与Mealy型状态机(不完全等同),即在switch语句中,还需判断Event才能决定输出的结果。

    //--------状态中查询事件(Mealy状态机)---------
    switch(State)
    {
    	case 0:  if(Event_0)   Action2();              //路径1
    	         if(Event_1)   {State=2;  Action0();}  //路径3 
    	         if(Event_2)   State=2;                //路径4
    			    break;
    	case 1:  if(Event_0)   State2;                 //路径5
    	         if(Event_2)   {State=0;  Action2();}  //路径2
    			    break;
        case 2:  if(Event_1)   {State=1;  Action1();}  //路径6
    	            break;
        default:    break; 
    }
    

    事件中查询状态:
    这种方法类似于Moore型状态机(不完全等同),在switch语句中,即无需再判断Event,由当前状态就知道结果。

    //--------事件中查询状态(Moore状态机)---------
    if(Event_0)          //中断或扫描得知Event0事件发生 
     {
     	switch(State)
     	{
     		case 0:    Action2();       break;    //路径1 
     		case 1:    State=2;         break;    //路径5
    		default:                    break; 
    	 }
     }
    if(Event_1)          //中断或扫描得知Event1事件发生 
     {
     	switch(State)
     	{
     		case 0:    State=2;     Action0();       break;    //路径3
     		case 2:    State=1;     Action1();       break;    //路径6
    		default:                    break; 
    	 }
     }
    if(Event_2)          //中断或扫描得知Event2事件发生 
     {
     	switch(State)
     	{
     		case 0:    State=2;                    break;    //路径4 
     		case 1:    State=0;      Action2();    break;    //路径2
    		default:                    break; 
    	 }
     }  
    

    两种状态机的优缺与区别:
    1:如果Event直接由中断引发,不需要if语句轮询就能判断,则用Moore型转态机(事件中查询状态)执行速度快。这是因为,只需执行对应Event的switch(State)语句,而且switch中只需State进行判断就可以输出结果了。
    2:如果Event本身就需要轮询才能得出,则使用Mealy型状态机(状态中查询事件)的代码要简单。因为状态中查询事件只有一个switch(State)语句。
    扫描下方二维码关注我的个人微信订阅号:
    在这里插入图片描述

    展开全文
  • 温馨提示: 本贴适用于 Win10 UEFI 模式启动+硬盘(固态硬盘+机械硬盘)安装 ubuntu18.04 系统 本人电脑型号: 戴尔游匣5575 (128固态+1T机械硬盘),Win10UEFI启动模式,64位操作系统 ubuntu18.04下载链接:...

    温馨提示:  本贴适用于 Win10 UEFI 模式启动+双硬盘(固态硬盘+机械硬盘)安装 ubuntu18.04 双系统

    本人电脑型号: 戴尔游匣5575 (128固态+1T机械硬盘),Win10UEFI启动模式,64位操作系统

    ubuntu18.04下载链接https://www.ubuntu.com/download/desktop

    系统安装过程应注意的事项:

        1、安装原理

        2、安装环境

        3、安装过程

            3.1、安装环境配置

            3.2、分配硬盘安装空间

            3.3、制作启动U盘

            3.4、U盘启动安装

                3.4.1、基本步骤

                3.4.2盘符选择

                3.4.3、分区挂载

            4、安装完成

    1、安装原理:

            不管是单系统还是双系统,是legacy启动还是uefi启动,系统安装原理都是一样的,核心就是:系统部署+系统引导,电脑在启动后只有根据引导文件找到已经部署的系统才能正常启动。那些img、iso等各种类型的镜像文件,是系统的封装形式;进PE安装或者U盘、光盘启动盘安装,是系统的安装方式;用easyBCD、Bootice等工具修复系统引导,是改变系统的启动路径

    2、安装环境:

            安装双系统之前首先要了解自己电脑的软硬件环境,不同的软硬件环境搭配会导致不同的安装方法,这一点一定牢记!!网上有很多种安装教程,但是我们直接拿来用却不一定能成功,而且是往往不能成功,原因一般都不是这些教程本身有错误,而是因为其应用的环境与我们安装系统的软硬件环境有差异。 

      我的环境是:uefi启动模式下的win10 + ubutu18.04,其中win10 安装在 128G固态硬盘上(这也是为啥现在win10 启动时间仅仅10 几秒的原因),Ubuntu18.04LTS 安装在1T 机械硬盘上

    3、安装过程:

        3.1、环境配置

            开机按住 F2 进入  BOIS 设置(不同电脑品牌可能不太一样,有些品牌的电脑开机在右下角有提示,比如戴尔,具体方式自己百度) 用键盘上的方向键 右键 移动光标 到 Boot 选项 ,再用 键盘上的方向键 下键 移动光标至 Secure Boot 将其  Enabled  修改为 Disabled,Secure Boot安全启动项,不关闭的安装到 选择安装类型时 会提提示输入 安全启动项 密码,这个东西打售后技术支持 他们也不会告诉你的,所以为避免不必要的麻烦,一定要记得关闭 安全启动项 ),如图所示:

    进入 BOIS 界面:按下图设置:

    完成上述修改后,按下 F10,按下图设置:

    重启后,按 F2 进入 BIOS ,设置完成后 Boot 的界面如下图: 

    这说明 Secure Boot 项设置完成,之后 按  ESC 退出 BOIS ,电脑重启

        3.2、 分配硬盘安装空间

            win10 自带分区功能,鼠标放在 此电脑 右键  选择  管理  ,打开界面后选择 磁盘管理  ,接下来在你的 机械硬盘  上  找到一个 容量比较大的磁盘  鼠标选中 容量比较大的磁盘  鼠标右键 压缩磁盘  ,至于压缩磁盘的 大小是自己的磁盘可用量而定  ,我的 压缩磁盘 210GB (刚开始只分配了 150GB ,后来发现不够用, 卸载重新 压缩磁盘 安装的,建议:如果磁盘容量足够大,可以压缩空间大于 200G ),如下图所示:

            注意: 压缩的磁盘空间  一定不要分配盘符(即  不要新建卷  ,也即是不需要盘符 D、 E、F这些东西保持未分配状态

    查看 磁盘1 的分区方式 ,如下图:

    压缩后的磁盘空间 210GB  状态 : 未分配(不要新建卷,保持未分配状态)

    磁盘空间分配完成

         3.3、制作启动U盘

                这一步很关键,若电脑是 UEFI 启动模式,而不是  传统的 Legacy 启动,制作的  启动U盘 也要选择 UEFI 启动模式  否则 无法启动

               还要注意磁盘的 分区表 是 GPT 还是 MBR ,MBR是旧的分区表形式,GPT 是新的分区表形式,至于二者的具体区别这里不多说,想了解的自行百度,若是 GPT 分区表制作 U盘 时 就要选择 GPT  ,否则 无法启动

    制作 启动U盘的工具 推荐这一款 :   下载链接https://download.csdn.net/download/xrinosvip/10568860   (当然你也可以用其他U盘制作工具,自行百度)

                由于我的笔记本 是  UEFI模式启动,机械硬盘是  GPT 分区方案,故在制作  启动U盘  时,选择  用于UEFI计算机的GPT分区方案

            至于有些教程说 把 UEFI 模式 Boot 中修改为 Legacy 启动模式,对于UEFI 启动模式的 电脑,这是没必要的,这种方法陈旧了,对于新启动模式的电脑 早已不适用,而且就算安装成功,启动win10  和 Ubuntu 时,也要来回修改 Boot 下的 Boot List Option(启动模式),而且这种方法安装的双系统有一个 致命的缺点 就是容易出现 系统崩溃 ,况且 ubuntu18.04 LTS 也是长期支持版,本来就支持  UEFI 启动模式,而且 Legacy 模式 也无法 启动win10 ,具体制作过程如图下图所示:

    设置:按照上述图片中的 红色箭头 标注处设置,其余选项默认就可以

        3.4、U盘启动安装

            3.4.1、基本步骤

                插入制作好的U盘,重启电脑,狂点F12(不同主板按键不同)进入Bootloader,找到自己  U盘  ,使用键盘上的方向键选中(有些教程说要设置  U盘启动  ,重启就自动进入安装界面,这一步不是必须的,只要找到自己的 U盘即可),,按下  Enter  ,即可进入  ubuntu18.04  的安装界面,  这里可以选择 试用(在试用界面里左边工具栏 有安装图标), 当然也可选择  直接安装,至于选择哪种安装方式都是一样的,具体过程如下图所示:

    按F12 进入启动项 ,选择制作的 安装U盘

    选中 制作的 U盘  ,按下 Enter ,即可进入安装Ubuntu18.04 界面,会出现  试用不安装  和  直接安装

    选择  试用不安装  进入下列界面

    下一步安装:

    直接安装  和 试用不安装 进行上面两步操作后,都会进入下面界面:

    选择安装语言,按图示操作即可:

    下一步,选择键盘布局

    下一步,Updates and others software:

    下一步,安装类型一定要选择 something else:

    下一步,分区挂载,这一步很关键:

     

              3.4.2、盘符选择

                        在原有系统上安装双系统有一个基本原则,那就是无论新系统是否安装成功,都不要破坏原系统环境,否则就是赔了夫人又折兵了。注意Ubuntu盘符的命名特点“sdxy”,其中x指物理磁盘号,y指磁盘的逻辑分区号,如sda1指第一块物理磁盘上的第一块逻辑分区,sdb2指第二块物理磁盘上的第二块逻辑分区。只要找准磁盘分区进行安装,原系统环境就不会被破坏,Ubuntu重装个十次八次的都有恃无恐。

    压缩的分区如下图:

    下一步

            3.4.3、分区挂载

                    这一步非常重要!非常重要!非常重要!,这一步关系到  Ubuntu系统是否会覆盖掉自带的win10系统  ,也关系到  双系统能否安装成功  ,安装到   Installation type  这一步时,一定要慢慢来,选择   Something else  ,然后再点击   Continue ,(此处点击  Contiue 一定要慎重,并不是如某些教程所说的  一顿  Continue 狂点,狂点  Continue 造成的个人损失 本人概不负责),第一次安装一定要慢慢的按照步骤来操作      

    我的安装方案: 

      ubuntu18.04只需挂载了 两个分区: 1、 挂载 /     2、 挂载 / home  分别分配空间  90GB 和 110GB 

    "/"  是根目录,其他的分区会自动挂载到 "/" 根目录,所以 "/" 根目录需要多分配点空间("/"类似于Windows的 c 盘,所以这个目录下装的是系统的东西,如果你安装软件习惯默认安装,没有修改路径的习惯,建议 "/" 多分配点空间,因为默认安装的软件都被安装在 "/usr"目录里面);

    "/home" 是用户文件夹(类似于Windows中的 user,当然也可以理解为Windows里面的除 C盘以外的,D,E,F盘,如果安装软件习惯修改安装路径,完全可以将软件安装在"/home"目录下),因此只需挂载这两个分区就够了下面的挂载分区介绍 仅供参考,具体操作过程如下图所示:

    挂载第一个分区, 挂载分区 /,这个  / 是根目录,类似于Windows 里面的 C 盘 :

    下一步,在弹出来的界面,分配  挂载分区 / 大小:

     

    第一个挂载分区  / ,完成,点击 OK

    下一步,挂载分区 /home :

    下一步,设置 挂载分区 /home 大小, /home 类似于Windows里面的 user文件夹或者 D、E、F盘:

     

    挂载分区 /home 完毕,点击 OK, 还不能安装!!!

    下一步,选择 将 Boot 安装在 Windows boot Manager 中:

    下一步

    下一步

    下一步

    下一步

    下一步,进入 安装界面:

     

                   挂载分区介绍:

                        1、挂载“/”,也叫根目录,类似于Windows的 “C”盘,类型为EXT4日志文件系统,选中逻辑分区空间起始位置, 因为除了home和usr还有很多别的目录,但那些都不是最重要的,“/”就把除了之前你挂载的home和usr外的全部杂项囊括了,大小也不要太小,最好不低于30GB。如果你非要挨个仔细分配空间,那么你需要知道这些各个分区的含义(Linux(ubuntu)分区挂载点介绍) ,对于 ubuntu18.04 不挂载 "/usr"也可以,会自动挂载在 "/"根目下

                         2、挂载“/home”,类型为EXT4日志文件系统,选中逻辑分区空间起始位置,这个相当于你的个人文件夹,类似Windows里的User,如果你是个娱乐向的用户,我建议最好能分配稍微大点,因为你的图片、视频、下载内容基本都在这里面,这些东西可不像在Win上面你想移动就能移动的。 
    总的来说,最好不要低于50GB ,我Ubuntu分区的总大小是150GB ,这里我给了110GB 
    给home。

                        3、swap交换空间,这个也就是虚拟内存的地方,选择主分区空间起始位置。如果你给Ubuntu系统分区容量足够的话,最好是能给到你物理内存的2倍大小,像我8GB内存,就可以给个16GB的空间给它,这个看个人使用情况,太小也不好,太大也没用。(其实我只给了8GB,没什么问题),其实也可以不设置,如果内存足够大,没必要设置,就 ubuntu18.04而言,这个swap 完全可以不要

                        4、boot 一定记住,不要单独/boot划分区;是的不要,不然就完蛋了,结果就是只能进一个系统,因为这里是EFI引导替代boot的grub;也请放心efi分区不会不够用,linux内核不在efi分区而在/boot,在你挂载分区,你会发现也是没有 Boot 的 挂载选项的,新教程这一项不需要了!

          在安装和分区界面,看到最下面一个,安装启动器到,换成你的EFI分区,一般有windows boot manager 等标识,就是 /dev/sda1 EFI 这样的(不分配Boot的具体原因参照此贴:http://forum.ubuntu.org.cn/viewtopic.php?p=3200137

                      5挂载“/usr”,类型为EXT4日志文件系统,选中逻辑分区空间起始位置,这个相当于你的软件安装位置,Linux下一般来说安装第三方软件你是没办法更改安装目录的,系统都会统一地安装到/usr目录下面,因此你就知道了,这个分区必须要大,针对ubuntu18.04也可以不挂在,会在 "/" 根目录下自动挂载一个 "/usr"

    (这里特别提醒一下,Ubuntu最新发行版不建议强制获取Root权限,因为我已经玩崩过一次。所以你以后很多文档、图片、包括免安装软件等资源不得不直接放在home分支下面。你作为图形界面用户,只对home分支有完全的读写执行权限,其余分支例如usr你只能在终端使用sudo命令来操作文件,不利于存放一些直接解压使用的免安装软件。因此,建议home分支多分配一点空间……)                

    不过就算你把所有目录都自定义分配了空间也必须要给“/”挂载点多分配一定的空间 。          

    4、 安装完成 ,重启电脑,默认 Ubuntu 是第一启动项, 重启电脑不能启动 Ubuntu

    重启ubuntu18.04卡在某个界面进不去,解决办法如下:

    如果启动后报错:BUG soft Lockup,关于这个错误参照下面链接https://blog.csdn.net/xrinosvip/article/details/80447139 

    5、Win10 和Ubuntu 启动引导向管理软件解决办法:https://blog.csdn.net/xrinosvip/article/details/80994450

    6、Ubuntu 下使用Linux命令简单总结:https://blog.csdn.net/xrinosvip/article/details/80894728

    7、纯英文论文看不懂,翻译软件来帮忙,支持整篇PDF或Word上传,翻译高效准确,首次注册送翻译积分,用于翻译论文https://www.fanyigou.com/tslg/share/Y19DEA5W.htm

     

    Reference:

    解决Windows10与Ubuntu16.04双系统时间不一样问题!(亲测,真正的正确方案)

            

                

     

    展开全文
  • Database Configuration Assistant 1 首先打开DCA,选择创建数据库 ...3 选择模板 事务处理(推荐) 3.1 创建数据库模板说明: ...4 创建数据库标识 全局数据库名 SID 5 … 6 … 7 等待数据库实例安装完成
  • Android自定义圆形进度条效果有进度标识点,有需要的可以看一下
  • 双向LSTM NLP序列标志读书笔记

    万次阅读 2016-10-14 15:56:21
    Bidirectional LSTM-CRF Models for Sequence Tagging 原论文下载地址: ...K.S.Yao,B.L.Peng,G.Zweig,D.Yu, X. L. Li, and F. Gao. 2014. Recurrent conditional random fields for language understanding
  • 一些特殊的名称,作为python语言的保留关键字,不能作为标识符 以下划线开始和结束的名称通常具有特殊的含义。例如__init__为类的构造函数,一般应避免使用 B:以数字开头,错误 C:使用了',不是字母、下划线或...
  • 因为装固态,所以我的机械盘c盘闲置了,刚好用来装ubuntu,有80G也够用。 事实上这是我第二次装windows+ubuntu系统,上次是在台式机上,在一块C盘里面装了2个系统,没出任何问题。但是这次在两个盘上装系统,却...
  • 2.4G通信

    千次阅读 2020-10-17 21:09:00
    文章目录2.4G无线通信实验一、模块简介二、Enhanced ShockBurstTM模式介绍三. 编程1.初始化IO口2.Enhanced ShockBurstTM发送流程3.Enhanced ShockBurstTM发送模式初始化4.Enhanced ShockBurstTM接收流程5.Enhanced ...
  • 入门学习Linux常用必会60个命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    g,--group=组:自行设定所属组,而不是进程目前的所属组。 -m,--mode=模式:自行设定权限模式 (像chmod),而不是rwxr-xr-x。 -o,--owner=所有者:自行设定所有者 (只适用于超级用户)。 -p,--...
  • C语言

    万次阅读 多人点赞 2019-12-18 23:01:50
    111.%g是C语言printf()函数的一个输出格式类型,它表示以%f%e中较短的输出宽度输出单、精度实数,在指数小于-4或者大于等于精度时使用%e格式 112.p++是指下一个地址。 (p)++是指将p所指的数据的值加一。 C编译器...
  • 拼输入法-自然码和微软

    千次阅读 2020-12-23 01:18:46
    拼输入法 拼输入法是在拼音输入法的基础上进行了二次编码,将全拼拆解为两部分将这两部分进行合并分配至26键上。本文介绍自然码和微软拼。本人力荐自然码。 自然码拼输入法 码表 键 全拼码 键 全拼码 键...
  • 双线性对在密码学中的应用(下)

    千次阅读 2020-11-30 16:21:44
    双线性对是一种二元映射,它作为密码学算法的构造工具,在各区块链平台中广泛应用,比如零知识证明、聚合签名等技术方案大多基于线性对构造得来。 本次分为上、下两个篇章讲解双线性对在密码学中的应用。 上篇回顾...
  • 业内专家长篇综述:6G最新进展及未来发展趋势

    千次阅读 多人点赞 2020-12-19 16:49:12
    近日,由东南大学尤肖虎教授领衔,王承祥教授组织起草,联合国内外 24 家科研院校及企业的 50 位业内专家,针对 6G 最新进展及未来发展趋势撰写了一篇长达 70 多页的综述 “Towards 6G wireless communication ...
  • EXPRESS-G

    千次阅读 2018-11-16 17:35:01
    一种产品数据的图形表达方法──EXPRESS-G 一种产品数据的图形表达方法──EXPRESS-G(下) EXPRESS-G是理解EXPRESS语言写出的数据模型的一个很好的工具,其最大的特点在于用图形的方法描述概念。EXPRESS语言中将事物...
  • Mariadb互为主从(主模式)配置

    千次阅读 2019-07-10 17:42:07
    以往我们在配置MySQL卓仓复制时,一般而言 在配置到一主 一从 能够实现MySQL的读写分离 就差不多了,因为导师的要求 这里要配置一个互为主从的MySQL服务,也就是我们常说的主模式。 A B之间互相同步数据,...
  • 2.4g无线跳频(三)

    千次阅读 热门讨论 2017-08-23 19:32:13
    2.4g无线跳频(三) 一、跳频过程分析 1.主从建立连接,开启定时器。 2.对于主机,每个定时周期内,前部分处于发送模式,后部分处于接收模式;  对于从机,每个定时周期内,前部分处于接收模式,后部分处于发送...
  • Windows10+Ubuntu18.04系统安装记录。

    千次阅读 2018-11-13 22:42:12
    本文参考自:... 【预留磁盘空间】 打开磁盘管理,可以看到磁盘被分成4个分区,包括1个主分区(C盘)和3个逻辑分区(D、E、F盘) 将F盘划分出50G,用于安装Ubuntu18.04系统,在F盘上右键,然后...
  • C语言 单精度和精度实数输出

    千次阅读 2019-02-04 10:50:26
    C语言 单精度和精度实数输出 有意义数字和无意义数字的演示
  • DDcGAN:用于多分辨率图像融合的判别器生成对抗网络
  • MySQL主从复制与主复制原理与配置

    千次阅读 2018-11-03 01:48:00
    可以SHOW PROCESSLIST在主服务器的输出中将此线程标识为Binlog Dump线程。 二进制日志转储线程获取主机二进制日志上的锁,用于读取要发送到从机的每个事件。一旦读取了事件,即使在事件发送到从站之前,锁也会被...
  • C#基础教程-c#实例教程,适合初学者

    万次阅读 多人点赞 2016-08-22 11:13:24
    C#基础教程-c#实例教程,适合初学者。 第一章 C#语言基础 本章介绍C#语言的基础知识,希望具有C语言的读者能够基本掌握C#语言,并以此为基础,能够进一步学习用C#语言编写window应用程序和Web应用程序。...
  • 在c语言中: 1. 使用`%c`输出的是字符本身。 2. 使用`%d`输出的是字符对应的ASCII。 3. 在ASCII中,小写英文字符 =...4. 还有注意区分单引号`''`和引号`""`的区别。 单引号:字符,是可以进行加减的。 引号:字符。
  • ubuntu18.04系统安装教程

    千次阅读 多人点赞 2020-09-10 20:28:49
    Windows10安装ubuntu18.04系统教程 说明:系统,非虚拟机。 懒癌晚期,偏爱傻瓜教程,做大佬博客“傻瓜化”搬运工,大佬博客都在参考链接中给出。我所整理皆经过本人亲身实践,参考了多篇博客,也建议大家切忌盯...
  • 安装 Ubuntu 和 CentOS 系统

    千次阅读 2020-03-26 19:23:54
    经过前后两三天的倒腾,终于成功装好。各个步骤如下: 1. 重新划分硬盘分区。为此,需要依次缩小现有的**文件系统**(file system)、**逻辑卷**(logical volume)、**物理卷*... 使用 live USB 为 Ubuntu 重新安装 g
  • Windows7下安装Ubuntu14.04系统说明

    千次阅读 2016-03-13 14:16:37
    大家都知道在Linux下开发... 以windows下的Ubuntu系统你值得拥有。  简述:安装该系统默认的情况是win7系统是已经安装好的,然后在win7中新压缩出一个空白卷来,该空白卷用于安装我们的Ubuntu系统。 一、安装
  • 标志后,加载圈出现前按一下就可以了。 secure boot 选择 DISABLED,按 F10 保存并退出。 电脑会自动重启,按 F12 进入UEFI。 3. 安装 Deepin 1.选择先前制作的启动盘 2.继续安装 按照 ...
  • 如何在ThinkPadE580上安装Ubuntu系统

    千次阅读 2018-12-09 10:26:02
    最近由于需要在Windows10下安装Ubuntu系统,所以通过查阅别人的博客,以一个小白的能力安装了Ubuntu,现在写出来给大家参考。方法上主要就是参考别人的,就是根据自己的实际情况做了一些补充。 制作系统U盘 1.去...
  • (3)当UE携带表示其源网络为5GC或EPC的标志位在目标系统网络中进行初始附着时,MME或AMF在发送给HSS+UDM的消息中不会携带“初始附着”标识,以提示HSS+UDM不要删除源网络AMF或MME发送的注册信息。 (4)当PDN连接...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 84,826
精华内容 33,930
关键字:

双g标识