Github Page

레이블이 PC-BIOS-UEFI인 게시물을 표시합니다. 모든 게시물 표시
레이블이 PC-BIOS-UEFI인 게시물을 표시합니다. 모든 게시물 표시

10/17/2025

CXL 의 이해 와 구조

1. CXL(Compute Express Link) 의 이해 

CXL (Compute Express Link) 에 대해 급하게 알아야 할 듯하여,관련 자료들을 수집하고 학습. 

  • CXL(Compute Express Link) 란?
PCIe 기반으로 사용되어지는, 고속 DMA Controller 비슷할 것 같다. 
즉 CPU 입장에서 생각하면, 각 Cache 에 연결된 AMBA(AHB,APB,AXI) 와 DMA를 이용하여 각 Memory 고속으로 전송하는 Bus Switch Interface가 맞을 듯 하다 

  • UCIe
CXL 기반으로 출발한 것 같으며, 현재 Chiplet이라는 ,즉 실리콘 즉 반도체에서 이를 다 연결하려고 하는 Interface가 맞을 것 같다.

  • PCIe
PCI에서 발전된 Bus로 PCI/HPI는 직접 Driver를 개발했지만, PCIe 직접 개발해보지 못해 이 부분은 나중에 별도로 정리하도록 한다. 
요즘은 솔직히 Kernel Platform화가 잘 되어있어, 개발보다는 주로 설정하고 변경하는 것이라 이 부분은 별도로 기회가 있으면 다시 정리하도록 하겠다. 

  • CXL 의 개인적 생각 과 결론 
종합적으로 보면, CXL는 PCIe Interface 이용하지만, CPU 의 내부에서 비교하자면, AMBA(PCIe) 역할과 DMA Contorller 와 Memory Controller 가능 일 것이다. 
그러니, CPU 밖에서, 다양한 CPU들 과 연결하는 것도 쉽게 가능 하리라고 본다. 
더 나아가 왜 UCIe가 실리콘, 즉 반도체  위에서 한다는 이유도 대충 이해가 가는 듯하다. 


1.1 CXL 구조 와 CXL Type 

  • CXL 구조 와 Type 의 이해 
CXL에 대해 쉽게 설명이 되어 있어 , CXL 기본 구조 와 Type 1/2/3 쉽게 이해 
CXL 2.0 이 후 Type1/2/3 기반으로 연결 확장 가능하며, 이를 다양하게 더 확장이 가능 설명  

  • CXL 의 Spec 과 이해 
1.6 Flex Bus Layering Overview : Flex Bus 의 이해 
2.0 Compute Express Link System Architecture : CXL의 Type1/2/3 의 이해 
PDF의 좌측 Index 기반으로 각 살펴보면,  쉽게 감이 잡히는 듯하다 
관련 그림들은 혹시 문제가 될 듯해서 가져오지 않음 

Compute Express Link Consortium
  1. CXL 최신 Spec 신청가능하며 왠지 무료는 아닐듯?
  2. 일단 Spec 1.0으로만 만족 
 

  • CXL Device Type 1/2/3 구조 와 역할 
CXL Type 포함 프로토콜 주요 역할 예시 디바이스 특징
Type 1 CXL.io + CXL.cache 가속기(Accelerator) – 호스트 메모리를 캐시 형태로 접근 Smart NIC, FPGA Accelerator, AI Inference Engine 자체 메모리는 거의 없고, Host DRAM을 Cache Access 함
Type 2 CXL.io + CXL.cache + CXL.mem 고성능 가속기 – Host 메모리 접근 + 자체 메모리 공유 가능 GPU, FPGA with onboard HBM, AI Chip 호스트와 디바이스가 서로의 메모리에 Coherent Access
Type 3 CXL.io + CXL.mem 메모리 익스팬더(Memory Expander) – Host에 추가 메모리 제공 CXL.DIMM, CXL Memory Card, Persistent Memory CPU가 Device 메모리를 Load/Store 식으로 사용


  • CXL Controller 관점의 비교  
각 Host 와 CXL Device(CXL Controller) 관점에서 비교를 해보자. 
Cache 에 따라 성능이 변경되므로, 
Coherency Directory 즉 Cache 의 일관성을 어디까지 해야 하는 지이며, 알고리즘은 어떤 것을 쓰는지 또, 범위는 어디까지 하는 지가 중요하다(이 부분 다시 밑에) 

구성 요소 Type 1 Type 2 Type 3
CXL.cache
CXL.mem
CXL.cache
Coherency Directory (Host side only) (Host + Device side) (Host side only)
Local DRAM Access
목적 Compute 가속 Compute + 메모리공유 Pure Memory 확장

  • CXL Device Type1/2/3 확장 (결합)
CXL 2.0 이상부터는 이 Type 1/2/3 디바이스를 스위치와 Fabric구조에서 논리적 결합(Logical Device) 으로 묶을 수도 있다고 한다. 
증권사 자료이지만, 이해 하기가 자료 좋음 

  • CXL Fabric 간단 정리 
지능형 연결망이라고 하는데, 각 기능들을 Thread 즉 실로 보고, 이를 엮어서 각 기능들의 총체적인 기능을 말한다고 한다. 
즉 CXL Fabric 구조는 여러 외부 CPU들 과 다양한 Peripherial 들 연결 확장까지도 생각을 해볼 수 있는 것이다. 



1.2 CXL Swtich 구조 

다양한 PCIe Channel 들을 처리하기 때문에 Arbiter/Mux 는 역할이 중요할 것 같으며, 
즉, DMA Controller 역할이 비슷할 거라고 생각되어진다.
상위 Spec1.0 보면 다양한 기능들이 들어가면서, 다양한 기능들을 처리하려면, 단순한 DMA Controller가 아닌 복합적인 DMA Controller 동작할 거 같다. 

CXL Switch 역시 여러 CXL Device Type 1/2/3 조합으로 각 CXL switch 마다 각 기능이 다 다를 것이다.  

여러 CXL Device Type 1/2/3 조합이 가능하므로, 아래로 한정적으로 생각하지 말자. 


CXL Switch Diagram


  • CXL 2.0 부터 추가되어진 기능 
기능 역할
Address Mapping / Routing 어떤 요청이 어느 Type으로 가야 하는지 결정
Coherency Management 여러 Type 2/3 장치가 같은 주소 접근 시 캐시 일관성 유지
QoS / Credit Flow 트래픽 제어 및 우선순위 관리
Memory Pooling / Partitioning 여러 메모리 모듈을 하나의 논리 풀로 묶음
Security (IDE) 각 링크별 암호화 및 키 관리


1.3 Rambus 의 CXL Controller IP 확인  

실제 CXL Controller IP 팔고 있는 곳이 있기에 관련 부분을 보도록 하자 

  • Data Encrytion 의 이해 
AES의 대칭키 이해와 KEY 운영 GCM 확인 

  • CXL Controller IP기능 확인
  1. CXL Controller 3.1 vs CXL 2.0 비교 
  2. CCIX(Cache Coherent Interconnect for Accelerators) Controller  각 기능 
  3. CXL Controller  -> 거의 이게 핵심 
    1. PIPE 부분은 PCIe 와 같이 봐야 할 듯 

  • CXL 2.0 Controller 의 구조 
  1. CXL 2.0 Controller 
    1. CXL Protocol Layer
    2. User Interface Layer
    3. Integrity and Data Encryption (IDE)  -> AES-GCM 방식
    4. Unique Features & Capabilities
  2. CXL 2.0 Controller with AXI Block  
    1. ARM과 AMBA 호환 
  
  • Rambus CXL 2.0 Controller with IDE 
  1. IDE(Encrytion)의 Zero Latency  
    1. AES-256-GCM, GCM 이외 CTR 지원 가능
  2. 상위와 CXL 2.0 Controller 와 동일 

  • PCIe 의 구조 
  1. PCIe Contoller 
  2. PCIe Switch 
  3. PCIe Phy
CXL의 이해하려면 PCIe의 Phy를 사용하므로, 이 부분은 어 쩔 수 없이 봐야 할 듯하다 



2.  CXL 의 Cache 이해 

CXL의 Cache 는 아주 중요한 개념이며,  어떻게 보면, CXL 성능 핵심 기능일 듯하다.
즉 Cache 알고리즘에 따라 각 CXL의 성능이 달라질 것이며, 이 부분은 거의 회사마다 민감한 문제가 있을 듯하다. 


2.1  Cache Coherence 의 이해 

  • CPU 입장 의 SMP 관점 
다중 코어의 cache-coherency protocols 이용하여 1개의 Core처럼 사용을 하려 한다면, 어떻게 해야 하지  

  • OS 입장의 SMP vs AMP 관점 
OS 입장에서는 다중 코어일 경우,  SMP vs AMP 어떻게 Scheduling 할 것인지, 즉 방법 
Linux 의 경우, SMP기준으로 많이 사용 

  • CPU Cache Coherence 의 기본이해 
각 독립적인 Cache를 Sync를 맞춰주는 작업이며, 아래 그림을 보면 쉽게 이해 간다.
그럼 Why 사용할까 , ARM 같은 다중 코어 일 때, SMP로 Task Scheduling 하려면,  Cache Coherence의 역할은 중요하다 
이유는 아래같이 여러 Core 같이 동시에 나누어서 작업을 해야 하기 때문이다. 

https://en.wikipedia.org/wiki/Cache_coherence#Overview


  • Cache Coherence 의 문제
각 CPU  Cache의 Coherence를 맞추어 주는 것은 좋으나, Cache Coherence의 범위를 예측을 못하는 문제가 발생하다. 
SMP 기준으로 간단히 생각을 해보면, 
모든 CPU의 Cache가 Coherence되어, 1/2번째 CPU는 작업을 나누어 완료 후, 3번째 CPU의 Cache 오래되어, 이제 필요가 없어지는 문제이다. 

  • Cache Coherence 의 개인 생각 정리 
결과적으로, Cache Coherence 범위, Cache 사이즈 및 갯 수 정확하게 제대로 예측 못하면, Cache의 Hit 율이 계속 떨어지고 효율은 낮다. 
어떻게 보면, Cache 예측과 Coherence 범위가 가장 중요할 듯 하다 

좀 더 세부적으로 Cache Coherence 생각해보면, 아직 아래 Protocol도 이해를 못했지만, 
Cache Coherence 운영을 하는 입장에서 생각을 해보면, 다음과 같은 생각도 얼마든지 해볼 수 있다.  
  1. Cache Coherence를 3가지로 A.전체/B.부분(범위)/C.제외 이런 식으로 될 것 같기도 하다. 
  2. 가중치(weight,bias)기반으로 매번 Cache Coherence 변경되어지거나 다양하게 생각 할 수 있을 것 같다.
  3. CNN으로 TinyML 사용해서, 가중치 대신해서 사용 가능 할 것 같다. (다양하게 생각이 듦)
이 부분은 Spec 과 나중에 Cache Corency Protocol 이해 후 다시 생각해 보고, 이해해보도록 하자 


ESP32 Cache 와 Memory 비교 
개인적으로 ESP32 CPU 설계를 잘했다고 생각을 하며, ESP-IDF 역시 너무 잘 구현을 해놨다.



2.2 Cache Corency Protocol 

우선적으로 Cache Corency Protocol 이해 하기 위해서 각 Cache 상태들 부터  이해 해보도록 하자  
머리가 나쁘면, 고생이다. 

CAPI(Coherent Accelerator Processor Interface)

  • Cache 의 상태 이해 
Cache Coherency Protocol States 
상태 약어 의미 설명 
M Modified / D / Dirty / DE / EM - 한 개의 캐시에만 존재하고 수정된(Dirty) 상태
- 메모리 내용은 오래된 값 (아직 반영 안 됨)
- 교체 시 반드시 Write-back 필요
O Owner / SD / SM / T - 여러 캐시에 복사본 존재하지만 메모리는 오래된 값
- 한 캐시만 “소유자(Owner)” 역할
- 다른 캐시의 읽기 요청 시 Owner 캐시가 데이터 공급
E Exclusive / R / VE / EC / Me - 한 캐시만 데이터 보유하고 메모리와 동일(clean)
- 다른 캐시에는 복사본 없음
- 쓰기 시 바로 M(Modified)로 전환
S Shared / V / SC - 여러 캐시에 동일 데이터 복사본 존재
- 주로 읽기 전용(Read-only) 상태
- 메모리와 일관됨 (clean)
- 단, 일부 프로토콜(예: Dragon)은 Shared Clean이 dirty일 수 있음
I Invalid - 유효한 데이터 없음 (태그 불일치 또는 무효화됨)
- 접근 시 메모리나 다른 캐시로부터 새로 읽어와야 함


Special / Extended States (MESI 확장형)
상태 이름 설명
F (또는 R) Forward / Recent - Shared 상태 중 대표 캐시(Forwarder)가 응답 역할 담당
- 동일 데이터가 여러 캐시에 있을 때 메모리 대신 이 캐시가 응답(intervention)
- Intel: MESIF, IBM: R-MESI (MERSI)
H Hover - 캐시에 주소 태그만 유지, 데이터는 무효(Invalid)
- 버스에서 해당 주소가 탐지되면 빠르게 유효(S) 상태로 복귀
- HR-MESI, HRT-MESI 등에서 사용되어 검색 속도 개선


  • Cache Status 요약 비교
상태 캐시에 존재 메모리 최신성 공유 가능성 쓰기 가능성 설명
M ✔ 있음 ✘ 오래됨 수정됨, 아직 메모리 반영 안 됨
O ✔ 있음 ✘ 오래됨 여러 캐시 중 한 곳이 최신 데이터 소유
E ✔ 있음 ✔ 최신 유일한 캐시 복사본, clean 상태
S ✔ 있음 ✔ 최신 여러 캐시에서 읽기만 가능
I ✘ 없음 ✔/✘ 불명 데이터 없음 또는 무효 상태
F ✔ 있음 ✔ 최신 공유 중 대표 캐시(Forwarder)
H 태그만 존재 주소만 남겨 빠른 재활성 가능


Cache Corency Protocol 의 종류 와 알고리즘 
각 알고리즘의 흐름이 변경되어지는 것을 대충 알 수 있으며, 이 부분은 나중에 좀 더 확인하자.


MESI 의 이해 (대표적)
아직 완벽히 이해가 되지 않은 상태 

MESIF 의 이해 (요즘?)
아직 완벽히 이해가 되지 않은 상태 



3. CXL 의 Linux Manual  

현재 Linux를 잠시 보면, CXL는  Device Type 3으로 메모리 확장용 으로만 사용하는 듯하다. 

  • Linux Device Driver (CXL)
  1. CXL Linux Device Driver 와 Manual 
  2. CXL Device Type 3으로만 사용? 
CXL Device Type 3(Memory 확장용)로만 사용한 것 같으며, Manaul도 거기 까지 인듯하다. 

  • Linux UserSpace
  1. CXL Linux User Manual 
  2. CXL ioctl 이용 


3.1 CXL 의 Linux Kernel 소스 

Linux Kernel 소스 찾아 각 부분 확인 

  • PCI의 ACPI 의 정보 
다만 PCIe가 아닌 PCI 인듯하며, PM 제어는 오래전부터 존재 했던거 같다. 
상위 CXL 1.0 Spec을 보면 PM제어는 부분이 많이 나온다. 

  • BIOS 와 ACPI 관련이해 
BIOS 에서 사용하는 UEFI의  ACPI(Advanced Configuration and Power Interface)  


  • CXL 의 Core 소스 (Linux Kernel)
  1. 상위 Device Type 3 의 Memory 확장형 소스 인것 같음 
  2. Memory 를 보면 주로 모듈형 RAM을 제어 DIMM

  • CXL 의  이외 소스 (Linux Kernel)
  1. 상위 Core 기반으로 Memory 확장형에  ACPI 기술이 첨부
    1. UEFI 의 ACPI(Advanced Configuration and Power Interface)  
  2. PCIe를 그냥 PCI로 기술을 하는 듯함 



상위 Device Driver 와 각 Spec 1.0을 보면서 느낀 점을 정리하자면 아래와 같다. 

  • CXL Switch 의 개인생각 
CXL 관련 Linux Kernel 소스 부분 확인 및 구조 확인 했지만, Device Type 3만 확인되는 듯하며,
CXL Switch Driver(각 CXL Type1/2/3 복합적 연결)는 아직 발견을 못했으며, 
분명, USB Host 처럼 Bus 형태의 Driver 일 것 같은데, 현재 각 제조사마다 다 다를 테니 이것은 초창기 USB Host Controller와 비슷하게 갈 듯하다 

또한, 분명히 CXL Switch가 구조화가 복잡하게 되므로, USB Host처럼 각 Device 의 구조를 설명하는 Description 형태로 각 설정을 변경하는 구조로 갈 듯하다. 왠지?
상위 부분은 Spec을 보고 나중에 다시 생각해보자  


  • CXL 기반의 AI 업체 개인생각 
H/W 입장에서 보면, CXL기반의 AI 업체들의  핵심 개발은 왠지  CPU 와 GPU 와 NPU 의 CXL.cache 가 가장 중요할 듯 하다. 
이유는 SRAM을 가장 효율적으로 빨리 동작 시켜서 DRAM기반으로 VRAM으로 성능 최적화를 하려고 할 것 같다. 

S/W 입장에서 보면, NVIDIA처럼 이제 AI H/W 도 중요하지만, 오히려 S/W Platform의 다각화가 더 중요할 듯하다. 
(NVIDIA 사이트만 가봐도 이해가 되며, Training 대충 경험이 있다면 이해가 더 빠르다)


3.2 Linux 의 Yocto 

Yocto 기반의 Linux에서 CXL 관련부분 을 검색하고 자료 수집 하려 했으나, 아직 제대로 찾지를 못함 
나중에 찾으면, 아래에 링크를 추가하겠음 

  • Yocto 의 기본이해 
Yocto 의 기본이해 



  • Yocto 의 openembedded Layer 확인 
각 최신 버전 과 Layer 확인 했지만, 아직 발견 못함 
CXL Switch 일 경우, 각 Bus Driver가 있어야 할 듯한데, 흐음? 



3.3 Linux 의 QEMU 

Linux Kernel에서 QEMU의 기반의 CXL 부분 확인 

  • QEMU 의 Linux Device Driver (CXL) 
  1. CXL 전체 구조를 보면 역시 Device Type 3 메모리 확장형만 사용 
    1. CXL 2.0  Type.1/2/3 지원 (문제는 Type 3만 사용)
    2. KERNEL CONFIG 확인 
    3. QEMU 으로 동작되는 것을 확인 
      1. 아래 링크 확인

6/25/2022

Lenova Laptop 과 Ubuntu 22.04 설치

1. 나의 Lenovo Laptop 현재상황 정리   

이 Laptop을 구입 한지 얼마 안되었다고 지금까지 생각했는데, 벌써 2019년의 일이다. 
개인적인 부탁일 때문에 성능상 삼성노트북이 되지 않아 별도로 구입하였다. 

나의 삼성노트북이 존재하지만, Ubuntu까지 설치해가며 지저분하게 사용하고 싶지가 않다. 
차라리 삼성노트북에는 VirtualBox로만 사용하고 싶지 직접 Ubuntu를 설치하기가 싫다. 

최근 다시 Lenovo에서 Window를 재 사용하려고 하니, 갑자기 동작 안되어 무슨 조치를 해야 할 것 같아, 
다시 옛날 기록부터 다시 보기로 했으며, 최후에는 Ubuntu 22.04 재 설치 와 Window 10 Pro 을 두 개 다시 재 설치를 진행한다. . 

  • 현재 Lenovo Laptop 문제 상황정리 
  1. GRUB에서 Window 10 Pro 부팅동작안됨 (팬 소리만 요란함)
  2. BIOS 에서 부팅하여 Window 10 Pro로 해도 안됨 (팬 소리만 요란함)
  3. Ubuntu 20.04 의 NVIDIA Driver가 동작안됨 
  4. Ubuntu 20.04는 잘 동작되어짐 (다만 모니터 확장이 안됨)

아니, 동작이 되던것들이 안되니 무슨일인가? 
너무 오랫동안 사용하지 않아 그런것인가 아니면, 쿠팡의 5000원 Window 10 Pro 문제인가? 
그리고, Ubuntu 20.04의 NVIDIA Driver는 왜 또 맛이 갔는가? 
차주에 스코프가지고 Linux에서 테스트 하려고 했는데 모든것이 다시 원점으로 가야할 것 같다.  


1.1 Lenovo Laptop 자료 백업문제 

문제는 이 Laptop에 Raspberry Pi 의 Yocto 뿐만 아니라, Sphinx를 비롯하여, 다양한 자료들이 있다는 것이다. 

Raspberry Yocto 같은 경우는 자료정리도 못했으며, 얼추 다 해결되었는데, 그냥 날라간다.
블로그에 올리기도 힘들기도 하다. 
나중에 나만의 Yocto를 만들기로 하겠으며, 추후에 다시 해보도록 하겠다. 
참고로, Yocto에 관심이 있다면, 본인도, Chip Maker에서 제공하는 Yocto도 얼마든지 만들수 있다.
 
상위자료만 없어지면 괜찮은데, esp32(ESP-IDF) 비롯하여, snap 기반으로 한 다양한 Tool들은 이미 설치했는데, 설치하려니 골치아프다.
이외에도, docker (내가 구성한 컨테이너) 와 vscode 각 설정비롯하여 vnc도 전부 다 설치를 해두었는데, 
이를 다시 설치와 설정하려고 하니,머리가 아퍼진다. 
더불어, 저번에 conda를 비롯하여 잡다한 것들을 다 설치했는데 이를 다시 구성하려고 하니 골치아프다. 
더불어 node.js 기반의 npm (node.js) 이것저것 다 설치를 해두고 간단한 작업들을 했다. 
node.js 의 electron도 여기서 테스트 를 했기때문에 이 것도 자료를 포기하고 그냥 다 지워야 할 것으로 생각되어진다. 


1.2 USB 시동디스크 준비

우선 다시 USB 시동디스크 부터 준비하도록 하자!!!

  • USB 시동디스크 정리 
아래의 글들을 보면, Rufus를 비롯하여 Ether 와 MS사의 Tool 등을 다양하게 이용을 했으며,이 부분을 간단히 정리 
USB 시동디스크 이므로 아무거나 해서 BIOS에서 잡히면 된다.  


2. Lenovo Laptop 구입과 설치역사 전체정리 

우선 이 Lenovo Laptop의 구입 및 관련 설치들을 간단하게 정리하도록한다.
세부사항들은 각 링크를 참조하도록하며, 각 기록했던 설치기록을 참조하도록한다.


2.1 Window 10 Home 설치 

FreeDos용으로 Lenovo Laptop을 구입 후에 처음으로 설치한 작업이며, 기본적인 테스트만 진행하였다. 

  • Lenovo Laptop  (FreeDos구입결정 ) 
희망에 부풀어, 우선 기능테스트 하고자 미인증 Window 10 Home 설치하여 각 노트북의 기본 테스트 진행하였다. 
돈이 없어, Window 10 Home 구입 못했으며, 그냥 Window 10 Home으로 Key 없이 설치하고 각 Laptop의 기본기능만 테스트만 했다. 

이 제품을 구입때부터 말이 많았던 제품이며, 파는 사람도 좀 찝찝했지만, 당시에는 가성비가 나에게는 너무나 매력적이였기에, 
나의 선택은 당연히 이 제품이였다. 다시 나의 글을 보니, 이 제품을 산 것을 절대 후회한다
물론, 내가 Window 대신, Linux를 설치해서 문제이겠지만, 일단 팬소리가 너무 커서 귀에 거슬린다. 

  • Window 10 설치 후 기본 테스트
  1. MS사에서 제공해주는 Image Download 및 USB 생성기로 부팅디스크 생성 
  2. BIOS의 UEFI로 설정 
  3. Window 10 Home 설치 
  4. 각 Laptop의 기능확인 (NVIDIA 모니터 144Hz 지원확인못함)


2.2 Ubuntu 18.04 와 Window 10 Home 설치 

구입 후, 처음으로 Ubuntu 와 Window 10 을 두개를 같이 설치를 진행했으며, Ubunut의 경우 거의 동작이 되지 않아, 
관련사항들을 기록하였다. 

  • Ubuntu 18.04 와 Window 10 Home 설치진행  
  1. BIOS-ACPI 기반으로 문제발생 (Ubuntu에서 미지원)
  2. 각종 기본 Laptop Driver 문제사항들 정리   

  • 테스트결과 
  1. Ubuntu 18.04 UEFI 모드 부팅실패 
  2. BIOS Update
  3. Ubuntu 18.04 Legagy 모드 부팅완료
  4. BIOS ACPI 문제를 제외 (Grub에서 Kernel 옵션 acpi=off 임시해결)
  5. 이외 Laptop 나머지 Driver 문제들 드디어 해결 

상위 Window 10은 미인증으로 사용하지 않음 


2.3 Ubuntu 18.04 재설치 

  • Lenovo BIOS Update 후 Ubuntu 18.04 재설치  
Lenovo 사이트 제공해준 Guide 대로 설치 진행 후 일단 대충은 동작이 되어지는 것을 확인  
하지만 여전히 ACPI문제로 장시간 Linux를 동작 중 절전모드로 잠깐 가면 복구 안되어짐 
불편을 감수하고 사용을 했으며  각 Laptop의 Driver 문제사항정리 

  • 테스트결과 
  1. Ubuntu 18.04 각 Latptop Driver 문제사항 정리 
  2. WIFI 미동작 확인 및 수정완료 
  3. NVIDIA RTX-2060 Driver 설치 및 테스트 완료 
  4. WIFI/BT/UVC 테스트 확인 
  5. Gparted 로 각 Partition 추가  
  6. BIOS ACPI 문제를 제외 
  7. 이외 Laptop 나머지 Driver 문제들 드디어 해결 
  8. RUFUS 불필요성 느낌 
Ubutu 18.04의 NVIDIA Driver TEST 진행완료 (개인업무시작)


    2.4 Ubuntu 20.04 와 Window 10 Pro 설치 

    Ubuntu 20.04로 변경 및 Window 10 Pro Key도 구입 
    • Ubuntu 20.04 와 Window 10 Pro 
    상위 급한 개인적인 일 다 끝나고, 내가 편하게 사용하고자 해서 다시 설치를 진행 
    Window 10 Pro는 쿠팡에서 5000원 주고 구입하여, 잘 설치를 진행했다
    다만 여전히 BIOS의 ACPI 즉, 전원문제부분은 완전히는 해결이 안되어진다.  

    하지만, 상위 문제 말고는 별다른 문제가 없기에 별 문제 없이 꾸준히 사용하고 있었다. 
    Linux에서 전원설정부분을 막았기 때문에, 큰 불편함을 못 느끼고 최근까지 살았다.  


    • 테스트결과 
    1. Ubuntu 20.04 설치 후 Window 10 설치 (BIOS에서 EFI 선택)
    2. Window 10 설치 후 Ubuntu 20.04 설치 (Grub에서 자동발견) 
    3. 상위 설치 순서에 따라 Window Manager를 BIOS의 EFI or Grub에서 발견   
    4. 두 개의 OS를 NVME 기반으로 설치 진행 
    5. RUFUS 불필요 


    상위 글의 BIOS와 현재 BIOS 비교해보면, 
    1. 상위 생성한 USB DISK 연결확인 
    2. Reset 후 F2로 BIOS 모드 진입
    3. Boot->Legacy : 이 부분이 없어짐 
    상위 문제로 현재 Boot Legacy 때문에 Window가 동작 안되는 것으로 생각되어짐 
    BIOS를 Update해서 생긴 것 같음 

    • BIOS->BOOT Mode->Legacy Support

    • BIOS->BOOT Mode->UEFI 


    3. Ubuntu 와 Window 재설치 진행   

    일단 Window 10의 정품이 필요할 것 같은데, 왠지 5000원 CD Key는 믿음이 안 가서 관련것을 다시 찾아 봐야겠으며, 
    과연 이 후진 Laptop에 Window 10의 정품이 필요한 가에 대해 다시 의문이 든다. 
    찾아보니, 5000원 CD Key도 문제가 없다고 하여 재 설치를 진행

    더불어 최신 Ubuntu 22.04는 ACPI문제가 없는 지를 확인 필요 
    BIOS Update해서 Window의 EFI 내에서 문제가 발생한 것으로 생각되어진다.
    그러니까 부팅자체가 안되어진 걸로 보인다.

    • EFI PXE Network 설치방법 
    IPTime의 DHCP가 BOOTP를 포함한 기능이 제공되지 않으며, 이 기반으로 설치하려면 천상 별도의 DHCP Server 와 TFTP Server가 별도필요
    상위기반으로 설치 및 동작확인하고자는 아래를 보시면 크게 무리없이 하리라 본다.  


    • USB 시동디스크 기반으로 설치진행
    상위 USB 시동디스크 참조
    1. Window 10 Pro 설치결정 
    2. Ubuntu 22.04 설치결정 (최신버전이 ACPI 문제가 많이 줄어듦)
    Grub으로 쉽게 선택하기 위해서 상위 순서로 설치진행하며, 순서를 반대로 설치해도 된다.
    다만, 순서를 반대로 할 경우, BIOS에서만 Boot 선택 가능하므로 불편함을 감수해야한다.  


    3.1  Window 10 Pro 우선설치 

    Window 10 Pro 부터 먼저 설치 진행 

    • Window 10 USB 시동디스크 
    1. MS사에서 Window 10 설치프로그램 
      1. Download MediaCreationTool21H2.exe
      2. USB 시동디스크 생성완료 
    2. Rufus 를 이용하여 Window 10 USB 시동디스크  설치진행 
      1. Rufus Download
      2. 우측 선택-> 다운로드 변경 후 클릭 
      3. Window 10 선택 

      USB 시동디스크 관련내용은 상위 1.2 시동디스크 부분참조 



      • Window USB 시동디스크 확인 
      ESD-USB 에 설치디스크 확인 



      • BIOS 설정 
      1. F2 BIOS 진입 
      2. Boot->Boot Mode: UEFI 설정 (동작되어짐)
      3. Boot->EFI 
        1.  USB BOOT 진행



      • Window 10 Pro 설치 
      1. Window 설정 (언어/시간/키보드)
      2. Window 정품인증
        1. 제품키가 없음 (현재 ID로 관리)
      3. 설치할 운영체제 선택
        1. Window 10 Pro 선택
      4. 관련통지 및 사용조건
        1. 동의 
      5. Windows 설치프로그램
        1. 사용자지정: Windows만 설치(고급)
        2. 삭제:  드라이브 0/1 모든 Partition 전부 제거  
          1. 드라이브 0: WD HDD
          2. 드라이브 1: Samsung NVMe
        3. 새로 만들기: 120000 MB (드라이브 1 선택) 
        4. 자동파티션 3개 생성 (MSR/시스템/주)
      6. USB 시동디스크에서 기본설치 된 후 재부팅 
      7. 기본설정진행 (언어/네크워크)
      8. 개인용설정
      9. 계정 ID로 로그인 (PW반드시 기억)
        1. PIN 번호 설정  
      10. 서비스 권한설정 
      11. MS OFFICE 365 서비스 구독거절 

      설치프로그램 Drive 1의 Partition 확인


      • Window 10 Pro 설치 후 확인사항 
      1. 실행 
      2. 하드 디스크 파티션 만들기 및 포맷 (이전 디스크 관리자)
        1. 디스크 1 의 할당되지 않음 선택
        2. 새 단순볼륨 200000MB 추가 확장완료
      3. 탐색기
        1. 내 PC 의 속성
        2. PC 이름바꾸기 
          1. LAPTOP-LENOVO
      4. Window Update 진행 (시간이 많이 소요됨)

      Patition 확장완료 및 디스크 1 구성확인


      상위 디스크1(NVMe)구성을 간단히 보면 아래와 같다
      1. Window 용 EFI 
      2. Window 용 NTFS(C:)
      3. Window 용 NTFS (복구파티션)
      4. Window 용 NTFS(D:)
      5. 나머지 Linux 용으로 설치예정 (Linux용 EFI 와 EXT4 설치)

      Window 사이트에서 로그인하여 본인의 Laptop을 확인가능 
      상위 계정의 PC의 이름은 내 PC의 PC이름과 동일 


      3.2 Ubuntu 22.04 설치 

      Window 10 Pro를 설치완료 후 Ubuntu 22.04 설치진행 


      Ubuntu 22.04 AMD64 Download

      • USB 시동디스크 설치 
      만약 Rufus에서 ISO 추출에러 발생하면, ISO 대신 dd 방식, 클러스터 8192로 변경 
      USB 시동디스크 관련내용은 상위 1.2 시동디스크 부분참조 




      • BIOS 설정 
      1. F2 BIOS 진입 
      2. Boot->Boot Mode: UEFI 설정 (동작되어짐)
      3. Boot->EFI 
        1.  USB BOOT 진행





      • Ubutu 22.04 설치 
      1. Try to Install Ubuntu 
      2. Ubuntu 22.04 설치 
      3. 설치방법 중략
      4. 설치형식
        1. Windows Boot Manager를 그대로 두고 Ubuntu 설치 
          1. 기본권장 하지만, NVMe 에 대신 SATA 에 기본설치되어 기타변경  
          2. Disk0 HDD  DISK1 NVMe로 잡힘 
        2. 기타  
          1. 남은공간 에서 2개 Partition 생성
          2. + 256 MB (EFI)
            1. 새 파티션의 종류: 주 
            2. 새 파티션의 위치: 이 공간이 시작하는 지점 
            3. 용도: EFI 시스템 파티션 
          3. + 전부 MB (EXT4)
            1. 새 파티션의 종류: 주 
            2. 새 파티션의 위치: 이 공간이 시작하는 지점 
            3. 용도: EXT4
            4. 마운트위치: / 
          4. 부트로더를 설치할 장치 
            1. NVMe 선택 

      설치형식-> 기타 선택

      기타-> 2개의 Patition 생성(EFI 와 EXT4)

      Linux 용 EFI 와 EXT4을 추가 

      설치를 진행해도 아직 ACPI의 문제는 남아있으며, 이 부분은 추후 좀 더 확인
      하지만, 이전 20.04보다 에러상황이 많이 줄었음 



      3.3 Window -> Ubuntu 22.04 설치후 결론 

      기존에는 BIOS의 Legacy Support로만 되었는데, 이제 UEFI 모드로 제대로 동작이 되어진다. 
      결론적으로 이제 UEFI가 제대로 동작이 되어지며, BIOS를 반드시 Update를 해야 한다. 
      참고로, 나의 경우는 BIOS를 여러번 Update를 진행하였다.
      (내 개인 E-Mail로 Lenovo에서 새로운 BIOS Firmware가 나오면 꼬박꼬박 날라온다) 

      다만 현재까지 아직 Ubuntu 22.04에서도 BIOS의 ACPI의 부분적인 문제가 해결되어지지 않았다.
      아래에 Lenovo BIOS Update를 하는 법을 간단히 기술하며 주의사항을 언급한다.


      4. Lenovo BIOS Update


      • 주의사항 
      BIOS Update를 여러번 해본 결과 반드시 주의해야하며, 이전에는 Update 후에 UEFI가 이상해져서, 
      잘안되는 경우와 다양한 경우를 봤기때문에, 물론 이상한 방법으로 해결도 했지만,  안되는 경우도 발생하여, 
      반드시 새롭게 OS를 설치할 각오를 하고, BIOS를 Update하시는게 마음이 편한 것 같음.  

      문제가 생기는 원인들은 이 Laptop에 동시에  두 OS (Linux 와 Window) 설치하여 사용하기 때문에 생기는 것이므로, 
      이 Laptop의 OS를 Window 전용으로만 사용한다면, BIOS Update 문제 없을 거라고 본다.(추측)  
      그러니 겁먹지 마시길 


      • Lenovo BIOS Update

      Lenovo Laptop 정보


      상위와 같이 BIOS update


      my Laptop BIOS Update

      • Lenovo BIOS Update
      윈도우로만 잘 쓰고 문제가 없다고 느끼시는 분들은 별로 추천하지 않는다

      • Lenovo LOGO Update
      재미있는 것은 Booting 때 지겨운 제조사 로고 대신 나만의 로고로도 변경가능하며, 하지만 별 다르게 변경할 LOGO를 찾지 못해 아래의 것은 하지 않는다.
      추후 변경할 것이 있다면 그때 다시 생각하도록 하자.  (그때까지 보류)


      12/12/2020

      Lenovo Ubuntu 20.04 와 Window 10 재 설치

       1. Lenovo Laptop 재설치 개요 

      현재 Ubuntu 18.04 와 Window 10 Home(미인증)을 별도의 두 개의 Driver에 나누어 설치하여 Dual Boot로 사용중이며, 
      일반적으로 사용하면 큰 문제 없지만, 새로운 Ubuntu 20.04에 기대가 커서 다시 설치하기로 결정하였다. 

      하지만 기존에 작업하던 Machine Learning / Deep Learning 을 위해서 구입한 이 Laptop의 최대 성능을 사용하기 위해서 
      Ubuntu 18.04 가 NVMe 1T Bytes 전부 사용하고 있었으며, Conda를 비롯하여, NVIDIA 관련 Docker를 비롯하여 
      DeepStream 역시 전부 지우기로 결정하였다.

      저번 개인알바일이 끝났으므로, 더 이상 필요 없을 것으로 생각되지만, 왠지 좀 자료들을 많이 정리하지 못해 아쉽다. 
      하는 일에 비해서 매번 정리해야 할 자료가 너무 많기때문에 , 어쩔 수 없이 자료정리는 포기하기로 결정한다. 

      만약 다음에 다시 개발하면, 새로 배우는 줄 착각할 것 같다. 

      이번기회에 Window 10 Pro 구입과 동시에,  Ubuntu 20.04 와 같이  두 OS를 빠르게 사용하기위해서 전부 NVMe에 모두 설치하기로 결정하였다.   
      나머지 HDD는 백업용으로 사용하기로 결정. 

      • Ubuntu 18.04 설치 후 설정 및 각 테스트 한 사항 

      • Ubuntu 18.04 와 Window 10 설치 

      설치전 확인사항 이전에 Window 10의 Image가 4G이 조금 넘어 현재 가지고 있는 USB Flash가 전부 4G이어서 현재 USB SD Card로 이를 해결. 
       
      • USB 시동디스크 와 UEFI 기본이해 


      1.1 Lenovo 현재 SSD/HDD 구성확인

      • Lenovo SSD와 HDD 구성 
      1. NVMe 1T:  Ubuntu 18.04 분할하여 전체사용 
      2. HDD 1T: Window 10 Home (미인증) 전체사용 
      NVMe에 GRUB이 설치되어 HDD의 Window 10 Home Manager을 인식하며 Dual Boot 가능하며, 동시에 BIOS로 UEFI Boot 도 EFI를 조절하여 부팅도가능 


      1.2 Lenovo 설치 SSD/HDD 구성예정 

      • Lenovo SSD/HDD 설치구성 
      1. NVMe 1T:  Ubuntu 20.04 / Window 10 Pro( 구입 및 인증)
        1. Window 500G Byte 사용예정  (250G/250G)
          1. C: 250G 
          2. D: 250G
        2. Ubuntu 20.04 500G Bytes 사용예정
          1. EFI와 ROOT로만 분할하고 전체사용   
      2. HDD 1T: 
        1. 여분으로 이용할 예정이며, Window 500G는 Backup 용도 
        2. 여분으로 이용할 예정이며, Ubuntu 500G는 확장으로 사용 

      • 설치방법순서 비교
      1. Window 10 설치 -> Ubuntu 20.04 설치 : GRUB이 Window Manager를 파악가능
      2. Ubuntu 20.04 설치 -> Window 10 설치 : GRUB이 파악못함 

      • 결론 
      상위 두개다 해본 결과 Ubuntu 설치 후 Window 10 설치가 가장 만족이 높으며, 에러가 없다.


      1.3 Window 10 설치 -> Ubuntu 20.04 설치  

      NVMe에 한 곳에 넣을 것이므로, Window를 먼저 설치 후 Ubuntu를 설치해야 Window Manager가 보호되며, 
      GRUB에서 Ubuntu 와 Window Dual Boot가 가능할 것임. 

      Window 10는 잘 설치 되었지만, Ubuntu 20.04가 설치도중에, 문제가 발생한 후 멈추었으며, 완벽한 설치가 되지 않았음. 
      기존 Ubuntu 18.04 처럼 많은 문제를 일으키지는 않았지만, 반드시 BIOS를 Legacy Mode로 설치 진행해야함 
      (원래는 UEFI에서 되어야 하는 것 같은데, 안되어짐, BIOS가 아직 문제인 것 같음)

      • 설치 후 Linux GRUB기반으로 Dual Boot가능 
      1. Window 관련부분은 현재 문제 없는 것으로 보임 
      2. Ubuntu는 Graphic 관련부분에 문제사항이 있는 것으로 보이지만, 기본동작가능 
      3. BIOS의 Boot Option 선택이 아닌 Grub으로 편하게 Dual Boot가 가능해짐 

      • OS Dual Boot 방법 
      1. Linux GRUB에서 Window or Ubuntu를 쉽게 설정진행
      2. BIOS에서 결정 가능하며, EFI Booting 우선순위 설정가능 

      1.4 Ubuntu 20.04 설치 -> Window 10 설치  

      현재 각각 Window 와 Ubuntu 별도의 EFI가 존재하므로, Ubuntu 설치 한 후 Window 설치 진행 한 후, 
      BIOS에서 진입하여 매번 EFI 우선순위만 변경하여, Dual Boot도 가능.   

      Ubuntu 를 먼저 설치해야 하며, Window를 위해 공간을 남기기 위해서는 Ubuntu에서 고급옵션으로 Partition을  두 개로 분할.
      1. EFI (128~512Mb)
      2. Root Partition (EXT4)
      상위 각 Partition을 별도로 잡고 설치를 진행한 후, 나머지 공간에 Window 공간을 잡아 설치를 진행한다. 

      상위 설치 시에는 큰 문제가 없었으며,  Window 설치도 문제가 없었다. 
      다만, Grub이 먼저 설치되어 Window Manager를 발견을 못해서 Grub Booting 불가능하여,불편하며, 
      상위 Dual Boot는 BIOS기반으로만 진행 해야 한다. 

      다만 설치 후 BIOS의 EFI 기반 Dual Boot 가능하지만, Legacy Mode로만 가능하며, UEFI가 불가능하다. 
      BIOS에서 Legacy Mode로 EFI를 설정하여 직접 Booting Mode를 설정으로만 Dual Boot 가능 
      반드시 Boot Mode -> UEFI MODE는 아직 지원되지 않으며, Boot Mode->Legacy Mode로 실행 (왜 안되는지는 아직 모르겠음)

      • OS Dual Boot 방법 
      1. BIOS에서 결정되며, BIOS에서 직접 EFI Booting 순서 변경(F5/F6) 

      2. Lenovo Window 10 Pro 설치준비 

      • Window 10 Home/Pro Image 준비 

      상위를 Window에서 실행하면, 쉽게 USB로 Image를 생성해주며, 이를 이용하여 설치진행 
      파티션은 전부 다 지우고, 사용예정인 500G 중 다시 반씩 분할하여 각각 250G / 250G 사용하여 쉽게 설치진행.
       
      ** 외부 USB 8G 이상으로 준비 (상위 이미지 Write 후 Booting 모드에서 변경)


      3. Lenovo Ubuntu 20.04  설치준비 

      Lenovo Laptop이 Ubuntu 18.04을 완벽히 지원하지 못하므로, 이에 관련된 수정사항들을 기억해야하며,  더불어 아직도 가끔씩 파워부분 과 그래픽 부분이 가끔 이상하므로, 
      설치전에 이런 부분이 Ubuntu 20.04에서는 개선되어 있기를 바란다. (간절히)


      • Ubuntu 20.04 LTS Download 


      • 외장형 USB Ubuntu 20.04 제작 (기존과 동일)
      상위 Ubuntu 20.04 Image를 Download 한 후 아래와 같이 외장형 USB에 Image를 Write하여, Startup Disk를 생성한다.



      • 외장형 USB의 Ubuntu  Image의 Partition 구성확인 
      32GB 외장 USB 에 2nd Partition 에 FAT 기반으로 EFI Partion을 확인가능 




      3.1 Ubuntu 20.04 설치를 위한 BIOS 설정 

      기존과 동일하게 BIOS->Boot->Boot Mode->UEFI 로 설정 후 설치 진행하면,  Kernel Parameter에 acpi=off를 해야하지만 문제가 동일하게 발생 (UEFI Mode 설치 미지원)

      BIOS->Boot->Boot Mode 설정관련

      BIOS-> Boot->Boot Mode -> Legacy Mode로 변경할 경우 별도의 Kernel Parameter를 수정안해도 된다.
      하지만, ACPI의 완벽한 지원은 아직도 지원되지 않으므로 관련내용은 확인하도록하자.

      • Lenovo BIOS Legacy Mode 설정 준비
      1. 상위 생성한 USB DISK 연결확인 
      2. Reset 후 F2로 BIOS 모드 진입
      3. Boot -> Boot Mode: Legacy Support Mode 변경
      4. Boot -> Boot Priority : UEFI First
      5. Boot->EFI : 
        1. Linpus lite:  USB를 최상위로 변경 (F5/F6) 
      6. Boot->Legacy
        1. SATA HDD:  NVMe 최상위 유지 (F5/F6) 



      별다른 에러없이 진행되며 WIFI도 연결가능 (Ubuntu 18.04와 많이 다름)
      상위 EFI는 기존에 이미 Ubuntu 18.04 와 Window 10 Home이 설치가 되어있으므로 나오는 것이며, 이를 변경할 것임 

      • Ubuntu 20.04 설치준비
      1. Ubuntu 설치 진행 
      2. 무선네트워크 설정
      3. 디스크를 지우고 Ubuntu 설치 
      4. 파티션 직접설정
        1. EFI Partition 256 M
        2. EXT4  Root Partion 500G



      Ubuntu 20.04의 모든파티션을 새테이블을 이용하여 삭제진행 (기존 Parition 전부삭제) 


      • Ubuntu 20.04의 각 Partition 직접 설정 후 설치 진행
      1. EFI Partition : 256M 
      2. Root Partition: 500G  

      만약 Window 먼저 설치하면서 NVMe의 Partition을 설정했다면, NVMe의 남은영역을 전부 사용할 것이므로, 상위와 같이 수동으로 Partition 설정할 필요 없음 



      처음에 Ubuntu 18.04를 지우고 설치하면, 파티션을 수동 설정가능한 줄 알았는데, 안되어서 상위메뉴로 변경
      이전 설치와 다르게 Driver 문제들은 자동으로 해결되는 것으로 보이며, 18.04와 많이 달라 현재 만족하며 사용 


      4. BIOS의 PXE Boot

      상위는 USB기반으로 했지만, EFI를 Network 기반으로 가져와서 가능한 것으로 보이는데,  문제는 유선으로 해야할 것 같은데, 
      나중에 유선랜을 연결하여 해보도록 하자.   

      관련자료이며, 각 서버가 필요 

      9/03/2019

      Lenovo Ubuntu 설치및 HW 테스트 진행완료

      1. Lenovo Ubuntu 설치가이드 

      나의 Laptop 모델사양 재확인 
      - Lenovo Y540-15IRH LEGION i7 Prime 2060

      드디어 아래의 문서를 찾았으며, 아래의 문서대로 하면, WIFI Driver가 동작되는 것을 확인하였다.
      특히한것은 ETCHER를 이용하여, 그대로 사용했는데 RUFUS를 이용 안해도 되는것 같다.
      궁금한것은 RUFUS의 역할이 정확하게 뭐하는지 좀 애매한 것같다.
      EFI Partition을 만들어주는 역할이 추가 된 것로 생각 하면 될 것 같다. 

      • Lenovo Y530 Ubuntu Install Guide 
      Lenovo에서 출시한 Laptop 중 내것 과 가장 유사하며, CPU와 GPU와 Driver들은  많이 다르지만 기본 Board가 비슷할 것이며, 아래 설치가이드대로 설치 진행

        https://forums.lenovo.com/t5/Gaming-Laptops-Knowledge-Base/Installing-Ubuntu-on-the-Legion-Y530/ta-p/4187251
        https://github.com/kfechter/LegionY530Ubuntu
        https://github.com/kfechter/LegionY530Ubuntu/blob/master/Sections/Troubleshooting.md


      이전 Ubuntu  와 Window 설치 문제사항 
        https://ahyuo79.blogspot.com/2019/09/lenovo-laptop-ubuntu.html

      처음  ETCHER or Win32DiskImager를 이용하려 했었지만, RUFUS의 독특한 설정으로 (GPT/MBR 설정, BIOS설정)으로 RUFUS를 사용하게되었다.
      결론은 BIOS-> Legacy로 USB Boot를 하면, Rufus까지는 불필요한 것으로 보인다. 물론 사용하면 좋지만, ETHER로만으로 충분한 것 같다. 

      상위 Install  Guide의 파란화면은 WINDOW 10의 Recovery Mode의 설정이며, 관련부분은 별도 설정을 하지 않았다.
      이 궁금증은 나중에 보도록하고 설치를 진행하자

      1.1  상위 Y530 설치가이드 대로 진행 

      세부 그림 및 설정 사항은 상위 Y530 Ubuntu Install Guide를 보면 될 것 같다. 

      • Ubuntu 18.04 설치 진행 (WIFI 동작확인) 
      1. Ubuntu USB Boot가능한 Flash 생성 후 Lenovo USB에 연결
      2. 부팅후 F2를 눌러 BIOS 모드로 진입 
      3. BIOS->BOOT 를 Legacy Mode로 변경 
      4. BIOS->BOOT의 EFI 와 Legacy 부분의 USB 우선순위 맨 위로 변경 저장후 재부팅 
      5. USB 우선순위는 F10을 눌러 BOOT Manager 에서 순서변경가능 
      6. UBUNTU의 GRUB 실행시 try ubuntu without installing  실행
      7. UBUNTU가 실행 제대로 되면, Open Terminal 생성 후 아래의 Command WIFI 동작 
      8. sudo rmmod ideapad_laptop ( WIFI 동작가능)
      9. UBUNTU의 맨 왼쪽 아이콘에서 Ubuntu Install 진행하여 Ubuntu 18.04 설치진행
      10. 설치진행완료 후 아래와 같이 부팅시마다 ideapad_laptop 모듈을 미동작하도록 수정  
      11. sudo gedit  /etc/modprob.d/blacklist.conf  (WIFI 동작 )
      12. sudo update/ upgrade 
      13. Reboot 후 GRUB에서 e를 눌러 Kernel Parameter에 quiet splash nouveau.modeset=0 추가 (NVIDIA Driver설치 후 필요없다고함)
      14. GRUB에서 수정된 Parameter 값으로 부팅 F10진행 


      nouveau 관련내용 이해 , 설명이 잘되어 있음 
        https://blog.neonkid.xyz/66


      WIFI 미동작원인은 두개의 Driver가 동작되어 충돌되어 미동작되는 것이며, 이 모듈을 매번제거하면 해결 (ideapad_laptop)

      • WIFI 미동작 관련 부분  
      $ sudo rmmod ideapad_laptop  // WIFI Driver 동작확인 
      
      $ sudo gedit /etc/modprobe.d/blacklist.conf
      ........
      blacklist ideapad_laptop 
      

      매번 rmmod로 제거 할 수 없으니 Kernel Module Load하는 부분에서 완전히 제거 


      • 크롬설치진행 및 필요사항 설치
      $ wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - 
      $ sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
      $ sudo apt-get update
      //크롬 설치
      $ sudo apt-get install google-chrome-stable
      $ sudo rm -rf /etc/apt/sources.list.d/google.list 
      
      
      Ubuntu 기반의 개발환경 구성 
        https://ahyuo79.blogspot.com/2019/01/ubuntu.html
        https://ahyuo79.blogspot.com/2018/05/ubuntu-1604-lts-version.html

      Ubuntu 18.04 설치관련 정보 (NVIDIA 관련사항)
        https://eungbean.github.io/2018/08/08/Ubuntu-Installation1/

      NVIDIA Driver를 설치전에는 Setting 부분이 그래픽카드문제로 동작되지 않는다.
      그리고, 자주 사용하는 screenshot 과

      1.2 NVIDIA RTX-2060 Driver 설치진행

      자료출처
        https://hiseon.me/linux/ubuntu/install_nvidia_driver/

      상위에서 쉽게 설명을 해주어서 내  RTX-2060도 쉽게 설치했지만 더 쉽게 그냥 3줄로 설치 가능할 것 같다

      • NVIDIA DRIVER 설치준비

      $ cat /proc/driver/nvidia/version 
      cat: /proc/driver/nvidia/version: No such file or directory
      
      $ lspci -k
      ...
      01:00.0 VGA compatible controller: NVIDIA Corporation Device 1f11 (rev a1)
       Subsystem: Lenovo Device 3ffd
       Kernel driver in use: nouveau
       Kernel modules: nvidiafb, nouveau
      ...
      
      $ release="ubuntu"$(lsb_release -sr | sed -e "s/\.//g")
      
      $ echo $release
      ubuntu1804
      
      $ sudo apt install sudo gnupg
      $ sudo apt-key adv --fetch-keys "http://developer.download.nvidia.com/compute/cuda/repos/"$release"/x86_64/7fa2af80.pub"
      $ sudo sh -c 'echo "deb http://developer.download.nvidia.com/compute/cuda/repos/'$release'/x86_64 /" > /etc/apt/sources.list.d/nvidia-cuda.list'
      $ sudo sh -c 'echo "deb http://developer.download.nvidia.com/compute/machine-learning/repos/'$release'/x86_64 /" > /etc/apt/sources.list.d/nvidia-machine-learning.list'
      $ sudo apt update
      
      $ apt-cache search nvidia // NSIGHT 부터 CUDA nvvp 와 cuda-visual-tools 도 설치 가능 
      dmraid - Device-Mapper Software RAID support tool
      libvdpau-dev - Video Decode and Presentation API for Unix (development files)
      libvdpau-doc - Video Decode and Presentation API for Unix (documentation)
      libvdpau1 - Video Decode and Presentation API for Unix (libraries)
      libvdpau1-dbg - Video Decode and Presentation API for Unix (debug symbols)
      libxnvctrl-dev - NV-CONTROL X extension (development files)
      libxnvctrl0 - NV-CONTROL X extension (runtime library)
      nvidia-prime - Tools to enable NVIDIA's Prime
      nvidia-settings - Tool for configuring the NVIDIA graphics driver
      ubuntu-drivers-common - Detect and install additional Ubuntu driver packages
      vdpau-driver-all - Video Decode and Presentation API for Unix (driver metapackage)
      xserver-xorg-video-nouveau - X.Org X server -- Nouveau display driver
      libcuda1-340 - NVIDIA CUDA runtime library
      libnvidia-cfg1-390 - NVIDIA binary OpenGL/GLX configuration library
      libnvidia-common-390 - Shared files used by the NVIDIA libraries
      libnvidia-compute-390 - NVIDIA libcompute package
      libnvidia-decode-390 - NVIDIA Video Decoding runtime libraries
      libnvidia-encode-390 - NVENC Video Encoding runtime library
      libnvidia-fbc1-390 - NVIDIA OpenGL-based Framebuffer Capture runtime library
      libnvidia-gl-390 - NVIDIA OpenGL/GLX/EGL/GLES GLVND libraries and Vulkan ICD
      libnvidia-ifr1-390 - NVIDIA OpenGL-based Inband Frame Readback runtime library
      nvidia-331 - Transitional package for nvidia-331
      nvidia-331-dev - Transitional package for nvidia-340-dev
      nvidia-331-updates - Transitional package for nvidia-340
      nvidia-331-updates-dev - Transitional package for nvidia-340-dev
      nvidia-331-updates-uvm - Transitional package for nvidia-340
      nvidia-331-uvm - Transitional package for nvidia-340
      nvidia-340-dev - NVIDIA binary Xorg driver development files
      nvidia-340-updates - Transitional package for nvidia-340
      nvidia-340-updates-dev - Transitional package for nvidia-340-dev
      nvidia-340-updates-uvm - Transitional package for nvidia-340-updates
      nvidia-340-uvm - Transitional package for nvidia-340
      nvidia-346 - Transitional package for nvidia-346
      nvidia-346-dev - Transitional package for nvidia-352-dev
      nvidia-346-updates - Transitional package for nvidia-346-updates
      nvidia-346-updates-dev - Transitional package for nvidia-352-updates-dev
      nvidia-352 - Transitional package for nvidia-361
      nvidia-352-dev - Transitional package for nvidia-361-dev
      nvidia-352-updates - Transitional package for nvidia-361
      nvidia-352-updates-dev - Transitional package for nvidia-361-dev
      nvidia-361 - Transitional package for nvidia-367
      nvidia-361-dev - Transitional package for nvidia-367-dev
      nvidia-361-updates - Transitional package for nvidia-361
      nvidia-361-updates-dev - Transitional package for nvidia-361-dev
      nvidia-367 - Transitional package for nvidia-375
      nvidia-367-dev - Transitional package for nvidia-375-dev
      nvidia-375 - Transitional package for nvidia-384
      nvidia-375-dev - Transitional package for nvidia-384-dev
      nvidia-compute-utils-390 - NVIDIA compute utilities
      nvidia-dkms-390 - NVIDIA DKMS package
      nvidia-driver-390 - NVIDIA driver metapackage
      nvidia-headless-390 - NVIDIA headless metapackage
      nvidia-headless-no-dkms-390 - NVIDIA headless metapackage - no DKMS
      nvidia-kernel-common-390 - Shared files used with the kernel module
      nvidia-kernel-source-390 - NVIDIA kernel source package
      nvidia-opencl-icd-340 - NVIDIA OpenCL ICD
      nvidia-utils-390 - NVIDIA driver support binaries
      xserver-xorg-video-nvidia-390 - NVIDIA binary Xorg driver
      bbswitch-dkms - Interface for toggling the power on NVIDIA Optimus video cards
      boinc-client-nvidia-cuda - metapackage for CUDA-savvy BOINC client and manager
      bumblebee - NVIDIA Optimus support for Linux
      bumblebee-nvidia - NVIDIA Optimus support using the proprietary NVIDIA driver
      conky-all - highly configurable system monitor (all features enabled)
      conky-all-dbg - highly configurable system monitor (all features enabled - debug)
      cpufreqd - fully configurable daemon for dynamic frequency and voltage scaling
      flashrom - Identify, read, write, erase, and verify BIOS/ROM/flash chips
      gcc-7-offload-nvptx - GCC offloading compiler to NVPTX
      gcc-8-offload-nvptx - GCC offloading compiler to NVPTX
      gcc-offload-nvptx - GCC offloading compiler to NVPTX
      gimp-normalmap - Normal map plugin for GIMP
      hobbit-plugins - plugins for the Xymon network monitor
      kubuntu-driver-manager - Driver Manager for Kubuntu
      kubuntu-driver-manager-dbg - Driver Manager for Kubuntu -- debug symbols
      libgomp-plugin-nvptx1 - GCC OpenMP v4.5 plugin for offloading to NVPTX
      libnvtt-bin - NVIDIA Texture Tools (Binaries)
      libnvtt-dev - NVIDIA Texture Tools (Header)
      libnvtt2 - NVIDIA Texture Tools
      mate-optimus - MATE Desktop applet for controlling NVIDIA Optimus graphics cards
      mate-sensors-applet - Display readings from hardware sensors in your MATE panel
      mate-sensors-applet-nvidia - Display readings from hardware sensors in your MATE panel (NVIDIA sensors)
      numba-doc - native machine code compiler for Python (docs)
      nvidia-common - transitional package for ubuntu-drivers-common
      nvtv - tool to control TV chips on NVidia cards under Linux
      primus - client-side GPU offloading for NVIDIA Optimus
      psensor - display graphs for monitoring hardware temperature
      psensor-server - Psensor server for monitoring hardware sensors remotely
      pyrit - GPGPU-driven WPA/WPA2-PSK key cracker
      pyrit-opencl - OpenCL extension module for Pyrit
      python-numba - native machine code compiler for Python 2
      python3-numba - native machine code compiler for Python 3
      sensors-applet - Display readings from hardware sensors in your Gnome panel
      sysinfo - display computer and system information
      vc-dev - Library to ease explicit vectorization of C++ code
      vdpauinfo - Video Decode and Presentation API for Unix (vdpauinfo utility)
      hashcat-nvidia - Installs hashcat and its dependencies for users with NVIDIA GPU
      libaccinj64-9.1 - NVIDIA ACCINJ Library (64-bit)
      libcg - Nvidia Cg core runtime library
      libcggl - Nvidia Cg Opengl runtime library
      libcublas9.1 - NVIDIA cuBLAS Library
      libcudart9.1 - NVIDIA CUDA Runtime Library
      libcufft9.1 - NVIDIA cuFFT Library
      libcufftw9.1 - NVIDIA cuFFTW Library
      libcuinj64-9.1 - NVIDIA CUINJ Library (64-bit)
      libcupti-dev - NVIDIA CUDA Profiler Tools Interface development files
      libcupti-doc - NVIDIA CUDA Profiler Tools Interface documentation
      libcupti9.1 - NVIDIA CUDA Profiler Tools Interface runtime library
      libcurand9.1 - NVIDIA cuRAND Library
      libcusolver9.1 - NVIDIA cuSOLVER Library
      libcusparse9.1 - NVIDIA cuSPARSE Library
      libnppc9.1 - NVIDIA Performance Primitives core runtime library
      libnppial9.1 - NVIDIA Performance Primitives lib for Image Arithmetic and Logic
      libnppicc9.1 - NVIDIA Performance Primitives lib for Image Color Conversion
      libnppicom9.1 - NVIDIA Performance Primitives lib for Image Compression
      libnppidei9.1 - NVIDIA Performance Primitives lib for Image Data Exchange and Initialization
      libnppif9.1 - NVIDIA Performance Primitives lib for Image Filters
      libnppig9.1 - NVIDIA Performance Primitives lib for Image Geometry transforms
      libnppim9.1 - NVIDIA Performance Primitives lib for Image Morphological operations
      libnppist9.1 - NVIDIA Performance Primitives lib for Image Statistics
      libnppisu9.1 - NVIDIA Performance Primitives lib for Image Support
      libnppitc9.1 - NVIDIA Performance Primitives lib for Image Threshold and Compare
      libnpps9.1 - NVIDIA Performance Primitives for signal processing runtime library
      libnvblas9.1 - NVBLAS runtime library
      libnvgraph9.1 - NVIDIA Graph Analytics library (nvGRAPH)
      libnvrtc9.1 - CUDA Runtime Compilation (NVIDIA NVRTC Library)
      libnvtoolsext1 - NVIDIA Tools Extension Library
      libnvvm3 - NVIDIA NVVM Library
      nouveau-firmware - Firmware for nVidia graphics cards
      nvidia-cg-dev - Cg Toolkit - GPU Shader Authoring Language (headers)
      nvidia-cg-doc - Cg Toolkit - GPU Shader Authoring Language (documentation)
      nvidia-cg-toolkit - Cg Toolkit - GPU Shader Authoring Language
      nvidia-cuda-dev - NVIDIA CUDA development files
      nvidia-cuda-doc - NVIDIA CUDA and OpenCL documentation
      nvidia-cuda-gdb - NVIDIA CUDA Debugger (GDB)
      nvidia-cuda-toolkit - NVIDIA CUDA development toolkit
      nvidia-libopencl1-331 - Transitional package for nvidia-libopencl1-340
      nvidia-libopencl1-331-updates - Transitional package for nvidia-libopencl1-340
      nvidia-libopencl1-340 - NVIDIA OpenCL Driver and ICD Loader library
      nvidia-libopencl1-340-updates - Transitional package for nvidia-libopencl1-340
      nvidia-libopencl1-346 - Transitional package for nvidia-libopencl1-352
      nvidia-libopencl1-346-updates - Transitional package for nvidia-libopencl1-352-updates
      nvidia-libopencl1-352 - Transitional package for nvidia-libopencl1-361
      nvidia-libopencl1-352-updates - Transitional package for nvidia-libopencl1-361
      nvidia-libopencl1-361 - Transitional package for nvidia-libopencl1-367
      nvidia-libopencl1-361-updates - Transitional package for nvidia-libopencl1-361
      nvidia-libopencl1-367 - Transitional package for nvidia-libopencl1-375
      nvidia-libopencl1-375 - Transitional package for nvidia-libopencl1-384
      nvidia-modprobe - utility to load NVIDIA kernel modules and create device nodes
      nvidia-nsight - NVIDIA Nsight Eclipse Edition
      nvidia-opencl-dev - NVIDIA OpenCL development files
      nvidia-opencl-icd-331 - Transitional package for nvidia-opencl-icd-340
      nvidia-opencl-icd-331-updates - Transitional package for nvidia-opencl-icd-340
      nvidia-opencl-icd-340-updates - Transitional package for nvidia-opencl-icd-340
      nvidia-opencl-icd-346 - Transitional package for nvidia-opencl-icd-352
      nvidia-opencl-icd-346-updates - Transitional package for nvidia-opencl-icd-352-updates
      nvidia-opencl-icd-352 - Transitional package for nvidia-opencl-icd-361
      nvidia-opencl-icd-352-updates - Transitional package for nvidia-opencl-icd-361
      nvidia-opencl-icd-361 - Transitional package for nvidia-opencl-icd-367
      nvidia-opencl-icd-361-updates - Transitional package for nvidia-opencl-icd-361
      nvidia-opencl-icd-367 - Transitional package for nvidia-opencl-icd-375
      nvidia-opencl-icd-375 - Transitional package for nvidia-opencl-icd-384
      nvidia-profiler - NVIDIA Profiler for CUDA and OpenCL
      nvidia-visual-profiler - NVIDIA Visual Profiler for CUDA and OpenCL
      python-pycuda - Python module to access Nvidia‘s CUDA parallel computation API
      python-pycuda-dbg - Python module to access Nvidia‘s CUDA API (debug extensions)
      python-pycuda-doc - module to access Nvidia‘s CUDA computation API (documentation)
      python3-pycuda - Python 3 module to access Nvidia‘s CUDA parallel computation API
      python3-pycuda-dbg - Python 3 module to access Nvidia‘s CUDA API (debug extensions)
      tegrarcm - Tool to upload payloads in Tegra SoC recovery mode
      xserver-xorg-video-nouveau-hwe-18.04 - X.Org X server -- Nouveau display driver
      libnvidia-cfg1-418 - Transitional package for libnvidia-cfg1-430
      libnvidia-cfg1-430 - NVIDIA binary OpenGL/GLX configuration library
      libnvidia-common-418 - Transitional package for libnvidia-common-430
      libnvidia-common-430 - Shared files used by the NVIDIA libraries
      libnvidia-compute-418 - Transitional package for libnvidia-compute-430
      libnvidia-compute-430 - NVIDIA libcompute package
      libnvidia-decode-418 - Transitional package for libnvidia-decode-430
      libnvidia-decode-430 - NVIDIA Video Decoding runtime libraries
      libnvidia-encode-418 - Transitional package for libnvidia-encode-430
      libnvidia-encode-430 - NVENC Video Encoding runtime library
      libnvidia-fbc1-418 - Transitional package for libnvidia-fbc1-430
      libnvidia-fbc1-430 - NVIDIA OpenGL-based Framebuffer Capture runtime library
      libnvidia-gl-418 - Transitional package for libnvidia-gl-430
      libnvidia-gl-430 - NVIDIA OpenGL/GLX/EGL/GLES GLVND libraries and Vulkan ICD
      libnvidia-ifr1-418 - Transitional package for libnvidia-ifr1-430
      libnvidia-ifr1-430 - NVIDIA OpenGL-based Inband Frame Readback runtime library
      linux-modules-nvidia-390-4.15.0-1022-oracle - Linux kernel nvidia modules for version 4.15.0-1022
      linux-modules-nvidia-390-4.15.0-1047-aws - Linux kernel nvidia modules for version 4.15.0-1047
      linux-modules-nvidia-390-4.15.0-58-generic - Linux kernel nvidia modules for version 4.15.0-58
      linux-modules-nvidia-390-4.15.0-58-lowlatency - Linux kernel nvidia modules for version 4.15.0-58
      linux-modules-nvidia-390-4.15.0-60-generic - Linux kernel nvidia modules for version 4.15.0-60
      linux-modules-nvidia-390-4.15.0-60-lowlatency - Linux kernel nvidia modules for version 4.15.0-60
      linux-modules-nvidia-390-5.0.0-1018-azure - Linux kernel nvidia modules for version 5.0.0-1018
      linux-modules-nvidia-390-aws - Extra drivers for nvidia-390 for the aws flavour
      linux-modules-nvidia-390-azure - Extra drivers for nvidia-390 for the azure flavour
      linux-modules-nvidia-390-generic - Extra drivers for nvidia-390 for the generic flavour
      linux-modules-nvidia-390-lowlatency - Extra drivers for nvidia-390 for the lowlatency flavour
      linux-modules-nvidia-390-oracle - Extra drivers for nvidia-390 for the oracle flavour
      linux-modules-nvidia-418-5.0.0-1018-azure - Linux kernel nvidia modules for version 5.0.0-1018
      linux-modules-nvidia-418-azure - Extra drivers for nvidia-418 for the azure flavour
      nvidia-340 - NVIDIA binary driver - version 340.107
      nvidia-compute-utils-418 - Transitional package for nvidia-compute-utils-430
      nvidia-compute-utils-430 - NVIDIA compute utilities
      nvidia-dkms-418 - Transitional package for nvidia-dkms-430
      nvidia-dkms-430 - NVIDIA DKMS package
      nvidia-driver-418 - Transitional package for nvidia-driver-430
      nvidia-driver-430 - NVIDIA driver metapackage
      nvidia-headless-418 - Transitional package for nvidia-headless-430
      nvidia-headless-430 - NVIDIA headless metapackage
      nvidia-headless-no-dkms-418 - Transitional package for nvidia-headless-no-dkms-430
      nvidia-headless-no-dkms-430 - NVIDIA headless metapackage - no DKMS
      nvidia-kernel-common-418 - Transitional package for nvidia-kernel-common-430
      nvidia-kernel-common-430 - Shared files used with the kernel module
      nvidia-kernel-source-418 - Transitional package for nvidia-kernel-source-430
      nvidia-kernel-source-430 - NVIDIA kernel source package
      nvidia-utils-418 - Transitional package for nvidia-utils-430
      nvidia-utils-430 - NVIDIA driver support binaries
      xserver-xorg-video-nvidia-418 - Transitional package for xserver-xorg-video-nvidia-430
      xserver-xorg-video-nvidia-430 - NVIDIA binary Xorg driver
      linux-modules-nvidia-390-5.0.0-1020-oem-osp1 - Linux kernel nvidia modules for version 5.0.0-1020
      linux-modules-nvidia-390-oem-osp1 - Extra drivers for nvidia-390 for the oem-osp1 flavour
      linux-modules-nvidia-418-5.0.0-1020-oem-osp1 - Linux kernel nvidia modules for version 5.0.0-1020
      linux-modules-nvidia-418-oem-osp1 - Extra drivers for nvidia-418 for the oem-osp1 flavour
      nsight-systems-2019.3.7 - NVIDIA Nsight Systems is a statistical sampling profiler with tracing features.
      cuda-drivers-diagnostic - CUDA Driver diagnostics meta-package
      cuda-drivers - CUDA Driver meta-package
      cuda-gdb-10-0 - CUDA-GDB
      cuda-gdb-10-1 - CUDA-GDB
      cuda-libraries-10-0 - CUDA Libraries 10.0 meta-package
      cuda-libraries-10-1 - CUDA Libraries 10.1 meta-package
      cuda-libraries-dev-10-0 - CUDA Libraries 10.0 development meta-package
      cuda-libraries-dev-10-1 - CUDA Libraries 10.1 development meta-package
      cuda-nsight-10-0 - CUDA nsight
      cuda-nsight-10-1 - CUDA nsight
      cuda-nsight-compute--10-0 - NVIDIA Nsight Compute Addon
      cuda-nsight-compute-10-0 - NVIDIA Nsight Compute
      cuda-nsight-compute-10-1 - NVIDIA Nsight Compute
      cuda-nsight-systems-10-1 - NVIDIA Nsight Systems
      cuda-nvtx-10-0 - NVIDIA Tools Extension
      cuda-nvtx-10-1 - NVIDIA Tools Extension
      cuda-nvvp-10-0 - CUDA nvvp
      cuda-nvvp-10-1 - CUDA nvvp
      cuda-visual-tools-10-0 - CUDA visual tools
      cuda-visual-tools-10-1 - CUDA visual tools
      libcuda1-384 - Transitional package for nvidia-headless-418
      libnvidia-cfg1-410 - NVIDIA binary OpenGL/GLX configuration library
      libnvidia-common-410 - Shared files used by the NVIDIA libraries
      libnvidia-compute-410 - NVIDIA libcompute package
      libnvidia-decode-410 - NVIDIA Video Decoding runtime libraries
      libnvidia-diagnostic-410 - NVIDIA driver diagnostics utilities
      libnvidia-diagnostic-418 - NVIDIA driver diagnostics utilities
      libnvidia-encode-410 - NVENC Video Encoding runtime library
      libnvidia-fbc1-410 - NVIDIA OpenGL-based Framebuffer Capture runtime library
      libnvidia-gl-410 - NVIDIA OpenGL/GLX/EGL/GLES GLVND libraries and Vulkan ICD
      libnvidia-ifr1-410 - NVIDIA OpenGL-based Inband Frame Readback runtime library
      nsight-compute-2019.4.0 - NVIDIA Nsight Compute
      nvidia-384-dev - Transitional package for nvidia-driver-418
      nvidia-384 - Transitional package for nvidia-driver-418
      nvidia-compute-utils-410 - NVIDIA compute utilities
      nvidia-dkms-410 - NVIDIA DKMS package
      nvidia-driver-410 - NVIDIA driver metapackage
      nvidia-headless-410 - NVIDIA headless metapackage
      nvidia-headless-no-dkms-410 - NVIDIA headless metapackage - no DKMS
      nvidia-kernel-common-410 - Shared files used with the kernel module
      nvidia-kernel-source-410 - NVIDIA kernel source package
      nvidia-libopencl1-384 - Transitional package for nvidia-headless-418
      nvidia-opencl-icd-384 - Transitional package for nvidia-headless-418
      nvidia-utils-410 - NVIDIA driver support binaries
      xserver-xorg-video-nvidia-410 - NVIDIA binary Xorg driver
      libnccl2 - NVIDIA Collectives Communication Library (NCCL) Runtime
      libnccl-dev - NVIDIA Collectives Communication Library (NCCL) Development Files
      nvidia-machine-learning-repo-ubuntu1804 - nvidia-machine-learning repository configuration files
      
      $ apt search nvidia  // 자세한 설명로 확인가능 
      


      • NVIDIA Site에서 Linux Driver  확인 및 Driver Version 정보확인 
      NVIDIA Driver를 보니, GRD(Game Ready Driver) 와 SD(Studio Driver)로 나누어지는데, 개발자는 SD를 사용한다고 한다고 하는데  RTX2060은 미지원 확인
        https://www.nvidia.com/Download/index.aspx?lang=en-us

      RTX-2060(Notebook) 최신 Version 430 확인
        https://www.nvidia.com/Download/driverResults.aspx/149138/en-us

      Version 418의 RTX 2060 상위 1f11 과 동일 확인
        https://download.nvidia.com/XFree86/Linux-x86_64/418.43/README/supportedchips.html

      • NVIDIA DRIVER 설치 (Version 430)
      설치를 진행 한 후 Ubuntu Reboot

      $ sudo apt install nvidia-driver-430 
      $ sudo apt install nvidia-prime  //상위 설치시 포함됨 
      
      //430 Version 관련부분 확인 
      $ apt-cache search nvidia | grep 430  
      $ dpkg -l libnvidia-gl-430
      
      $ nvidia-smi
      Wed Sep  4 22:30:27 2019       
      +-----------------------------------------------------------------------------+
      | NVIDIA-SMI 430.26       Driver Version: 430.26       CUDA Version: 10.2     |
      |-------------------------------+----------------------+----------------------+
      | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
      | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
      |===============================+======================+======================|
      |   0  GeForce RTX 2060    Off  | 00000000:01:00.0 Off |                  N/A |
      | N/A   54C    P0    N/A /  N/A |      0MiB /  5926MiB |      0%      Default |
      +-------------------------------+----------------------+----------------------+
                                                                                     
      +-----------------------------------------------------------------------------+
      | Processes:                                                       GPU Memory |
      |  GPU       PID   Type   Process name                             Usage      |
      |=============================================================================|
      |  No running processes found                                                 |
      +-----------------------------------------------------------------------------+
      
      //상위 GPU Memory 확인 및 GPU PID 확인 
      //After Reboot 
      
      $ cat /proc/driver/nvidia/version 
      NVRM version: NVIDIA UNIX x86_64 Kernel Module  430.26  Tue Jun  4 17:40:52 CDT 2019
      GCC version:  gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1) 
      



      • Lenovo Graphic Card 설정 (기본 Graphic Card를 Intel 선택하면 안됨)
      상위 Lenovo 설치가이드에서는 기본 Graphic Card를 Intel로 사용하라고 했으나 나의 경우는 현재 확장 듀얼모니터 사용하여, Intel 이 지원이 안됨
      (참고만 하고 추후 업데이트되면 다시 테스트 진행)

      $ prime-select query 
      nvidia
      
      $ sudo prime-select intel
      Info: selecting the intel profile
      $ prime-select query
      intel
      
      $ sudo prime-select nvidia
      
      $ prime-select query
      nvidia
      
      $ cat /etc/X11/xorg.conf
      

      prime-select 관련내용
        https://github.com/wildtruc/nvidia-prime-select



      • Lenovo Graphic Card 사양
      1. Intel UHD Graphics 630: 4K 지원 (Default 설정)
      2. NVIDIA RTX-2060 (laptop) :  4K 지원

        https://www.intel.co.kr/content/www/kr/ko/support/articles/000025673/graphics-drivers.html


      • 추후에 쉽게 설치 (동작가능예측, 미확인)
      $ sudo add-apt-repository ppa:graphics-drivers/ppa
      $ sudo apt-get update
      $ sudo apt install nvidia-driver-430 
      

        https://www.reddit.com/r/Ubuntu/comments/b761of/nvidia_2060_rtx/
        https://launchpad.net/~graphics-drivers/+archive/ubuntu/ppa
        https://www.linuxbabe.com/ubuntu/install-nvidia-driver-ubuntu-18-04


      1.3  Laptop  WIFI/Bluetooth/ UVC  테스트 

      Laptop의 아래의 테스트만 이제 하면 얼추 다 테스트가 되는 것 같다
      1. LAN :  동작확인
      2. WIFI : 동작확인 
      3. RF-Bluetooth :  동작확인
      4. UVC Camera : Laptop의 Camera가 USB에 연결  및 동작확인  

      $ rfkill list all
      0: hci0: Bluetooth
       Soft blocked: no
       Hard blocked: no
      1: phy0: Wireless LAN
       Soft blocked: no
       Hard blocked: no
      
      $ lsusb -t
      /:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 10000M
      /:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 480M
      /:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/8p, 10000M
      /:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/16p, 480M
          |__ Port 6: Dev 3, If 0, Class=Video, Driver=uvcvideo, 480M           // Laptop Camera 
          |__ Port 6: Dev 3, If 1, Class=Video, Driver=uvcvideo, 480M
          |__ Port 9: Dev 4, If 0, Class=Human Interface Device, Driver=usbhid, 12M      // Key board / Mouse
          |__ Port 14: Dev 5, If 0, Class=Wireless, Driver=btusb, 12M           // Bluetooth
          |__ Port 14: Dev 5, If 1, Class=Wireless, Driver=btusb, 12M
      
      $ sudo apt install cheese  // UVC Camera TEST 
      

      상위 항목들을 다 테스트를 진행을 했으니, 얼추 Laptop의 동작이 제대로 되는 것 같다.
      드디어 제대로 된 설치가 된것 같으나, ACPI 부분이 좀 문제가 있어서,  Battery 부분정보가 95%로 나옴 ( Window는 100%로 표시)

      일단 기본동작 및 기본 HW 테스트 동작을 확인하였으나, mini Displayport 부분은 케이블과 모니터가 없기에 테스트 하지 못했지만, 상위 NVIDIA Driver에서 지원가능확인


      1.4  Gparted 사용 후 Partition 정리 

      Gparted를 이용하여 Partition 관리부분으로 Ubuntu 설치가 다 된 후에 별도로 Parition들을 추가하여 만들어 각각의 관리하기 위해서 아래와 같이 정리 

      일반부팅을 해서 Gparted를 이용하여 Partition을 생성하면 아래와 같이 Partition을 수정 및 생성하면 Pending이 되고 진행되지 않는다.



      왼쪽 아래 계속 Pending이 되고 진행이되지 않으며, 반드시 Edit->Apply All operations 실행해야진행된다.



      1GB NVMe 
      - EFI Partition 구성  (BIOS-UEFI BOOT 도 지원)


      1GB SDA(HDD)
      - EFI Partition 구성됨  (BIOS-UEFI BOOT 도 지원)



      $ ls -l /dev/disk/by-uuid  // or blkid
      UUID 확인 후 아래에서 설정 
      
      $ sudo vi /etc/fstab  // Linux Partition 세부설정 및 확인 
      # / was on /dev/nvme0n1p2 during installation
      UUID=38d297a7-29db-4b04-b293-bc4aa9dcb5ba /               ext4    errors=remount-ro 0       1
      # /boot/efi was on /dev/nvme0n1p1 during installation
      UUID=E549-D056  /boot/efi       vfat    umask=0077      0       1
      /swapfile                                 none            swap    sw              0       0
      
      
      #
      # ls -l /dev/disk/by-uuid  //UUID 확인 후 설정 
      #
      # Virtual box
      # 4ea3fb0a-50e0-4e27-a347-ac57b67effe7 -> ../../nvme0n1p3
      UUID=4ea3fb0a-50e0-4e27-a347-ac57b67effe7 /home/jhlee/VirtualBox        ext4    errors=remount-ro 0       1
      
      # 
      # ls -l /dev/disk/by-uuid  // UUID 확인 후 설정 
      # Workspace
      # 59289fb6-1c09-40a8-ae5d-2cf08d7e39d5 -> ../../nvme0n1p4
      #
      UUID=59289fb6-1c09-40a8-ae5d-2cf08d7e39d5 /home/jhlee/Worksapce        ext4    errors=remount-ro 0       1
      
      $ cat /proc/cmdline     //최종 Kernel Parameter 확인 
      BOOT_IMAGE=/boot/vmlinuz-5.4.0-53-generic root=UUID=38d297a7-29db-4b04-b293-bc4aa9dcb5ba ro quiet splash vt.handoff=1
      
      

      Ubuntu 관련부분 설치
         https://ahyuo79.blogspot.com/search/label/Ubuntu%20x86%20DevelEnv