Github Page

레이블이 IF-UEFI인 게시물을 표시합니다. 모든 게시물 표시
레이블이 IF-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. 아래 링크 확인

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

9/01/2019

Lenovo Laptop Window 와 Ubuntu 18.04 설치 및 문제사항 정리

1.  Window / Ubuntu Dual Boot 설치 준비

원래 나의 계획은 Laptop에 Ubuntu로만 전체 설치진행하고, Window 10의 경우,Ubuntu에서 VirtualBox를 이용하여 사용할 계획이였다. , 
하지만, 막상 Ubuntu 18.04를 Laptop에 직접 설치 해보니, 
Laptop의 각종 Driver들이 지원 되지 않으니 상위 계획을 할 수가 없어서 일단 아래와 같이 Ubuntu 와 Window 10를 별도로 설치 진행 후, 
두 OS를 Dual Boot로 임시적으로 사용하기로 결정했다.

  • Lenovo Laptop Partition 구성 
  1. NVMe: Ubuntu 18.04
  2. HDD: Window 10 Home

그래서, 기존에 이미 설치한 Ubuntu 18.04 LTS도 다시 전부 지우고 다시 Window 10을 130G만 잡고 다시 설치 진행하고, 
Ubuntu를 재 설치하기로 결정 (Window 10도 벌써 2번째 설치 중)

  • 중요사항 
이번 설치로 Ubuntu 18.04 와 Window 10 home을 Dual Boot로 진행하며, 
BIOS에서 UEFI 모드로만 설치하기로 결정


1.1 USB 시동디스크 와 UEFI 기본이해 

기존 Window 설치프로그램으로 USB Boot를 만들려면 시간이 너무 오래  걸려서 그냥 ISO기반으로 
RUFUS를 이용하여 USB Boot Disk를 만들어 설치하기로 결정

우선 USB 시동디스크와 UEFI의 기본적인 이해를 아래의 사이트에서 해야한다.

UEFI Booting 관련내용정리 (USB 시동디스크)
   https://ahyuo79.blogspot.com/2019/01/usb.html

Window 10과 Ubuntu Dual Boot (별도움이 안됨)
  https://www.pcsuggest.com/dual-boot-windows-10-and-ubuntu-uefi/

RUFUS Download 

  • File Download 및 준비사항 
  1. rufus-3.6.exe
  2. Window.iso
  3. Ubuntu.iso 

아래와 같이 Window ISO Image를 Download 진행후 RUFUS로 USB Boot 진행



1.2 Lenovo Laptop 정보확인 

  • BIOS 설정확인 
  1. Booting 시 F2를 눌러 BIOS Lenovo BIOS 진입 
  2. Information 정보 확인 
    1. Product Name: Legion Y540-151RH
    2. BIOS Version:  반드시 체크 
    3. Hard Disk: WDC WD10SPZX-24Z10
    4. NVME: SAMSUNG MZVLB1TOHALR-0000
    5. Secure Boot: Disabled
    6. Lenovo SN:  반드시 기억 
    7. UUID Number: 반드시 기억 
  3. Boot 정보확인
    1. Boot Mode: UEFI or Legacy Support
    2. USB Boot: Enabled
    3. PXE Boot to LAN: Enabled

PXE Boot to LAN은 전형적으로 DHCP(BOOTP)를 사용하여 진행한다고 한다. 
Laptop이 DHCPC가 되어 DHCP Server에게 각 Boot File 정보 와 IP를 할당 받고, TFTP 기반으로 Image를 다운받아 Booting을 진행

오래전에 DHCP 기반의 Embeded Board 랑 똑같은 구조인것 같다. 


2. Window 10 Home UEFI Mode로 재설치 진행 

RUFUS를 이용하여 Window 10 Image를 외장형 32G USB에 Write하여, Booting USB Disk 생성하도록하자.

  • MS사에 제공하는 Window  ISO Image   
MS사에 제공하며, Window ISO Image or USB에 직접설치가능 
RUFUS를 사용 할꺼 이므로, ISO File로 가져와야함 



  • RUFUS를 이용하여 USB Boot Window Image 생성 
일단 MS사꺼 보다 USB에 Window Image Write (속도가 빠름)


  • BIOS 설정변경 
  1. Booting 시 F2를 눌러 BIOS Lenovo BIOS 진입 
  2. Boot->Boot Mode : UEFI 변경
  3. Boot->USB Boot : Enable 
  4. Boot->EFI:  
    1. EFI Partition 중 우선순위를 USB를 최상위변경

  • UEFI Mode 설치후 EFI Partition 확인 
Window 10 Home은 NVMe가 아닌 HDD 위치에 설치완료





3. Ubuntu 18.04 설치 진행

Ubuntu 18.04 Image Download하여 USB Image로 생성 후 BIOS에서 UEFI Mode 와 Legacy Mode로 각각 개별 설치진행하여 테스트 진행하였다

  • Boot Mode UEFI Mode 와 Legacy Mode 
UEFI Mode  설정시 GRUB의  Kernel Parameter를 변경하지 않으면, 아예 동작되지 않으며, 변경하더라도 추후 다른 문제들이 발생

Legacy Mode로 설정시
GRUB 미수정 후 진행하며, ACPI 에러발생하지만 넘어가고 설치진행되지만 WIFI Driver 문제부터 다른 Driver의 문제가 발생하여
완벽한 설치가 진행되지 않아 다른방법을 찾아야할 것같음

  • Boot Mode 선택 결론
BIOS의 Legacy Mode로 설치 진행해야 할 것 같으며 문제사항은 해결해야 할것 같음 
각각의 문제사항들을 정리

  • BIOS-ACPI(Advanced_Configuration_and_Power_Interface)정보
ACPI 부분을 처음알아서 관련부분 자료조사 및 이해 
Power Management기능으로 AP에서 사용하는 PMIC 와 Power Management 기능이라고 보면 되겠다. 
거의 동일한 것으로 보인다.

일단 BIOS의 ACPI 에러로 설치는 커녕 Ubuntu 실행도 불가능하지만, 다만 GRUB에서 acpi=off 옵션을 넣어 임시방편으로 실행가능하지만,
제대로 동작되는 부분이 많이 없어 이 설치로 거의 Ubuntu 설치가 힘들 것 같다

Lenovo의 ideapad 8 UEFI 부팅정보
다 아는 내용이라 별 도움이 안되지만, 추후 내용이 BIOS Update되면 그때 확인하도록 하자.
  https://support.lenovo.com/co/ko/solutions/ht075710


  • Ubuntu UEFI USB Boot Image 생성 
Rufus를 이용하여 UEFI Mode와 GPT로 설정하여 USB Boot Image 생성



  • BIOS 설정변경 
  1. Booting 시 F2를 눌러 BIOS Lenovo BIOS 진입 
  2. Boot->Boot Mode : UEFI 변경
  3. Boot->USB Boot : Enable 
  4. Boot->EFI:  
    1. EFI Partition 중 우선순위를 USB를 최상위로 변경

  • GRUB2 Boot Loader 
Ubuntu Boot Loader로 현재 Version 2.x 이며  e를 선택하면 본인 직접 Kernel Parameter를 수정도 가능하며 이를 적용하려면 F10으로 부팅

GRUB2의 세부설정  (Config File 부분)
  https://help.ubuntu.com/community/Grub2

Common Kernel Options (ACPI 설정 옵션확인)
  https://help.ubuntu.com/community/BootOptions

GRUB의 UEFI BOOT 관련정보


  • Ubuntu 18.04 설치 혹 실행시 에러발생 
UEFI Mode 설치진행시, ACPI BIOS Error 발생 후 더 이상 진행되지않고 PAN만 오동작하여 소리가 커지고 문제발생(HDD Disk 소리인지 PAN소리인지 헷갈림)




  • BIOS-ACPI의 해결방법 
Kernel Parameter 수정방법 or BIOS Update 권장
ACPI(Advanced Configuration and Power Interface)로 Laptop에서 전원을 조절하는 부분으로 이에 관련된 Spec이 지원이 되어야한다. (현재 미지원)
  https://www.linuxquestions.org/questions/linux-laptop-and-netbook-25/acpi-error-on-ubuntu-18-04-boot-4175628907/
  https://askubuntu.com/questions/953666/acpi-errors-when-booting-cant-boot
  https://rog.asus.com/forum/showthread.php?81684-Ubuntu-Installation-Issues-UEFI-amp-ACPI


  • BIOS-ACPI 임시해결시 다른문제발생 
상위 GRUB으로 E를 눌러 Kernel Parameter에 acpi=off를 추가한 후 F10눌러 적용하면 상위문제가 해결되고 설치모드로 진입가능하지만 별도문제발생
  1. Ubuntu 설치모드 진입가능 
  2. 키보드는 동작가능 
  3. 터치패드 미동작 
  4. PAN의 오동작으로 소음이 점점 커짐 (처음에 PAN소리로 생각했는데, HDD소리같음)
  5. 무선네트워크 동작가능  
임시해결방법은 근본적인 해결이 아니며, PAN인지 HDD의 오동작을 어떻게 막을 수가 없다
너무 시끄러운 문제가 발생


3.2 BIOS-Legacy Mode USB Ubuntu 설치 문제사항 

참고로 착각하지 말아야 할 것은 아래의 Image Parition은 USB 이지 설치될 Linux의 Parition이 아니라는 것이다. 

  • Ubuntu Legacy USB Boot Image 생성 
Rufus를 이용하여 Legacy Mode와 MBR로 설정하여 USB Boot Image 생성



  • BIOS 설정변경 
  1. Booting 시 F2를 눌러 BIOS Lenovo BIOS 진입 
  2. Boot->Boot Mode : Legacy Support 변경 
  3. Boot Priority : UEFI First 설정 
  4. Boot-> Legacy: Boot USB 우선순위 변경 (F5/F6) 

  • GRUB2 Boot Loader 
Ubuntu 설치진행 (별도의 수정없음)

  • Ubuntu 설치진행모드 진입가능
  1. 상위와 동일하게 ACPI 에러는 발생하지만, 에러를 넘기고 설치모드로 진입가능
  2. 키보드 동작가능 
  3. 터치패드 동작가능 
  4. 무선네트워크 제대로 동작되지 않고 문제발생 (Driver 문제)
  5. 기본설치는 가능 

Legacy에서는 설치가 가능하지만, 무선네트워크/유선네트워크 미동작하는 문제발생
lspci로 살펴보면 Intel Wireless-AC 9560 감지확인가능

유선네트워크로 연결 후 아래와 같이 하면 update/upgrade가 가능 (WIFI 동작안됨)

웃긴것은 ifconfig도 동작되지도 않는데 아래 명령어가 동작된다.
ifconfig를 위해서 별도로 net-tools 설치하면 동작가능한데, 이것 기본설치가 제대로 되지 않았다.

$ sudo apt update 
$ sudo apt upgrade 
$ sudo apt install net-tools
$ sudo apt install ndisgtk 
$ sudo apt install ndiswrapper

  • WIFI 관련 문제사항
한마디로 Window 의 NDIS 를 가져다가 쓰라는 이야기이며, 현재 방법은 상위방법으로 설치진행
  https://askubuntu.com/questions/1158716/wlan-driver-xubuntu-18-lenovo-legion-y540-15irh-laptop

  • 현재 PCIe Interface로 연결된 장치확인 및 Firmware 확인
Laptop의 경우 기본적으로 모두 PCIe기반으로 연결이 되어있으므로, PCIe BUS에 연결된 것들을 확인하자.
$ lspci
00:00.0 Host bridge: Intel Corporation 8th Gen Core Processor Host Bridge/DRAM Registers (rev 07)
00:01.0 PCI bridge: Intel Corporation Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor PCIe Controller (x16) (rev 07)
00:04.0 Signal processing controller: Intel Corporation Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Thermal Subsystem (rev 07)
00:08.0 System peripheral: Intel Corporation Xeon E3-1200 v5/v6 / E3-1500 v5 / 6th/7th Gen Core Processor Gaussian Mixture Model
00:12.0 Signal processing controller: Intel Corporation Cannon Lake PCH Thermal Controller (rev 10)
00:14.0 USB controller: Intel Corporation Cannon Lake PCH USB 3.1 xHCI Host Controller (rev 10)
00:14.2 RAM memory: Intel Corporation Cannon Lake PCH Shared SRAM (rev 10)
00:14.3 Network controller: Intel Corporation Wireless-AC 9560 [Jefferson Peak] (rev 10)
00:15.0 Serial bus controller [0c80]: Intel Corporation Device a368 (rev 10)
00:15.1 Serial bus controller [0c80]: Intel Corporation Device a369 (rev 10)
00:16.0 Communication controller: Intel Corporation Cannon Lake PCH HECI Controller (rev 10)
00:17.0 SATA controller: Intel Corporation Device a353 (rev 10)
00:1d.0 PCI bridge: Intel Corporation Cannon Lake PCH PCI Express Root Port 9 (rev f0)
00:1d.5 PCI bridge: Intel Corporation Device a335 (rev f0)
00:1e.0 Communication controller: Intel Corporation Device a328 (rev 10)
00:1f.0 ISA bridge: Intel Corporation Device a30d (rev 10)
00:1f.3 Audio device: Intel Corporation Cannon Lake PCH cAVS (rev 10)
00:1f.4 SMBus: Intel Corporation Cannon Lake PCH SMBus Controller (rev 10)
00:1f.5 Serial bus controller [0c80]: Intel Corporation Cannon Lake PCH SPI Controller (rev 10)
01:00.0 VGA compatible controller: NVIDIA Corporation Device 1f11 (rev a1)
01:00.1 Audio device: NVIDIA Corporation Device 10f9 (rev a1)
01:00.2 USB controller: NVIDIA Corporation Device 1ada (rev a1)
01:00.3 Serial bus controller [0c80]: NVIDIA Corporation Device 1adb (rev a1)
06:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd NVMe SSD Controller SM981/PM981
07:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 15)


$ lspci -nnk | grep -e 0200 -e 0280 -A3
00:14.3 Network controller [0280]: Intel Corporation Wireless-AC 9560 [Jefferson Peak] [8086:a370] (rev 10)
 Subsystem: Intel Corporation Device [8086:0034]
 Kernel driver in use: iwlwifi
 Kernel modules: iwlwifi
--
07:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 15)
 Subsystem: Lenovo RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [17aa:38cd]
 Kernel driver in use: r8169
 Kernel modules: r8169

//Intel Corporation Wireless-AC 9560 Firmware
$ ls /lib/firmware/iwlwifi-9000-pu-b0-jf-b0-34.ucode
/lib/firmware/iwlwifi-9000-pu-b0-jf-b0-34.ucode

lspci -nnk 하면 사용하고 있는 Kernel Module도 같이 확인가능
( Kernel Module도 있는데 왜 작동이 안되는지 dmesg로 분석)

  • /lib/firmware 의 정보확인 (WIFI Firmware )
상위 장소에 HW관련된 Firmware를 가지고 있으며, 이 정보를 확인
  https://www.intel.co.kr/content/www/kr/ko/support/articles/000005511/network-and-i-o/wireless-networking.html
  https://www.intel.com/content/www/us/en/support/articles/000005511/network-and-i-o/wireless-networking.html
  https://askubuntu.com/questions/1054012/driver-intel-ac-wireless-9560-ubuntu-18

  • 무선장치정보확인 
유선은 동작이 되었으니, WIFI가 동작되지 않아 원인 분석 중이며, 아래와 같이 확인 가능 - 현재 해결중 
$ rfkill list all
0: ideapad_wlan: Wireless LAN
 Soft blocked: no
 Hard blocked: yes
1: ideapad_bluetooth: Bluetooth
 Soft blocked: yes
 Hard blocked: yes
2: hci0: Bluetooth
 Soft blocked: yes
 Hard blocked: no
3: phy0: Wireless LAN
 Soft blocked: no
 Hard blocked: no


$ dmesg | grep iwl
[    3.005710] iwlwifi 0000:00:14.3: loaded firmware version 43.95eb4e97.0 op_mode iwlmvm
[    3.051419] iwlwifi 0000:00:14.3: Detected Intel(R) Dual Band Wireless AC 9560, REV=0x318
[    3.154652] iwlwifi 0000:00:14.3: base HW address: 48:89:e7:32:1c:a2
[    3.224101] ieee80211 phy0: Selected rate control algorithm 'iwl-mvm-rs'
[    3.225468] iwlwifi 0000:00:14.3 wlp0s20f3: renamed from wlan0

참조자료
  https://askubuntu.com/questions/1158716/wlan-driver-xubuntu-18-lenovo-legion-y540-15irh-laptop


3.3 ACPI 문제 분석  

일단 대충 땜방으로 해결했으나, 좀 더 분석을 해보고 어떻게 할지 더 보자. 
대충 분석하는 것이기때문에, 틀리수도 있음 

  • ACPI 에러분석 
에러내용을 봐도 Power Management의 AML opcode  Parsing에서 에러가 나며, 
한마디로 현재 Ubuntu에서 이 Laptop의 ACPI기능을 완벽히는 지원못해주는 것으로 보인다.

ACPI AML Spec 


$ uname -a
Linux jhlee-Legion-Y540-15IRH 5.0.0-25-generic #26~18.04.1-Ubuntu SMP Thu Aug 1 13:51:02 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

$ dmesg | grep ACPI
[    0.000000] BIOS-e820: [mem 0x000000009e49e000-0x000000009eb8dfff] ACPI NVS
[    0.000000] BIOS-e820: [mem 0x000000009eb8e000-0x000000009ec0dfff] ACPI data
[    0.000000] efi:  ACPI=0x9ec0d000  ACPI 2.0=0x9ec0d014  SMBIOS=0x9dc50000  SMBIOS 3.0=0x9dc4e000  ESRT=0x9dc4cb98  MEMATTR=0x8cf62018 
[    0.012110] ACPI: Early table checksum verification disabled
[    0.012113] ACPI: RSDP 0x000000009EC0D014 000024 (v02 LENOVO)
[    0.012116] ACPI: XSDT 0x000000009EBEE188 0000FC (v01 LENOVO CB-01    00000001      01000013)
[    0.012121] ACPI: FACP 0x000000009EBF1000 00010C (v05 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012126] ACPI: DSDT 0x000000009EBBC000 0304E0 (v02 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012129] ACPI: FACS 0x000000009EB0D000 000040
[    0.012131] ACPI: UEFI 0x000000009EC0C000 000236 (v01 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012133] ACPI: SSDT 0x000000009EC0A000 001B1C (v02 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012136] ACPI: SSDT 0x000000009EC06000 0031D0 (v02 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012138] ACPI: UEFI 0x000000009EC05000 000042 (v01 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012140] ACPI: SSDT 0x000000009EC04000 00045A (v02 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012143] ACPI: SSDT 0x000000009EC03000 000046 (v02 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012145] ACPI: TPM2 0x000000009EC02000 000034 (v03 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012147] ACPI: POAT 0x000000009EC01000 000055 (v03 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012150] ACPI: SSDT 0x000000009EBFC000 0044B6 (v02 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012152] ACPI: LPIT 0x000000009EBFB000 000094 (v01 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012154] ACPI: WSMT 0x000000009EBFA000 000028 (v01 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012157] ACPI: SSDT 0x000000009EBF9000 000C2F (v02 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012159] ACPI: DBGP 0x000000009EBF8000 000034 (v01 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012161] ACPI: DBG2 0x000000009EBF7000 000061 (v00 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012164] ACPI: SSDT 0x000000009EBF6000 000896 (v02 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012166] ACPI: SSDT 0x000000009EBF3000 002F89 (v02 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012168] ACPI: ASF! 0x000000009EBF2000 0000A5 (v32 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012171] ACPI: HPET 0x000000009EBF0000 000038 (v01 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012173] ACPI: APIC 0x000000009EBEF000 00012C (v03 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012175] ACPI: MCFG 0x000000009EBED000 00003C (v01 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012178] ACPI: SSDT 0x000000009EBB9000 002BBF (v02 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012180] ACPI: DMAR 0x000000009EBB8000 000070 (v01 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012182] ACPI: SSDT 0x000000009EBB5000 002A9D (v01 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012185] ACPI: SSDT 0x000000009EBB4000 00004C (v02 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012187] ACPI: FPDT 0x000000009EBB3000 000044 (v01 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012189] ACPI: BGRT 0x000000009EBB2000 000038 (v01 LENOVO CB-01    00000001 ACPI 00040000)
[    0.012197] ACPI: Local APIC address 0xfee00000
[    0.200167] ACPI: PM-Timer IO Port: 0x1808
[    0.200168] ACPI: Local APIC address 0xfee00000
[    0.200175] ACPI: LAPIC_NMI (acpi_id[0x01] high edge lint[0x1])
[    0.200175] ACPI: LAPIC_NMI (acpi_id[0x02] high edge lint[0x1])
[    0.200176] ACPI: LAPIC_NMI (acpi_id[0x03] high edge lint[0x1])
[    0.200176] ACPI: LAPIC_NMI (acpi_id[0x04] high edge lint[0x1])
[    0.200177] ACPI: LAPIC_NMI (acpi_id[0x05] high edge lint[0x1])
[    0.200177] ACPI: LAPIC_NMI (acpi_id[0x06] high edge lint[0x1])
[    0.200178] ACPI: LAPIC_NMI (acpi_id[0x07] high edge lint[0x1])
[    0.200178] ACPI: LAPIC_NMI (acpi_id[0x08] high edge lint[0x1])
[    0.200179] ACPI: LAPIC_NMI (acpi_id[0x09] high edge lint[0x1])
[    0.200179] ACPI: LAPIC_NMI (acpi_id[0x0a] high edge lint[0x1])
[    0.200180] ACPI: LAPIC_NMI (acpi_id[0x0b] high edge lint[0x1])
[    0.200180] ACPI: LAPIC_NMI (acpi_id[0x0c] high edge lint[0x1])
[    0.200181] ACPI: LAPIC_NMI (acpi_id[0x0d] high edge lint[0x1])
[    0.200181] ACPI: LAPIC_NMI (acpi_id[0x0e] high edge lint[0x1])
[    0.200182] ACPI: LAPIC_NMI (acpi_id[0x0f] high edge lint[0x1])
[    0.200182] ACPI: LAPIC_NMI (acpi_id[0x10] high edge lint[0x1])
[    0.200245] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl)
[    0.200246] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)
[    0.200247] ACPI: IRQ0 used by override.
[    0.200248] ACPI: IRQ9 used by override.
[    0.200250] Using ACPI (MADT) for SMP configuration information
[    0.200251] ACPI: HPET id: 0x8086a201 base: 0xfed00000
[    0.287523] ACPI: Core revision 20181213
[    0.350148] PM: Registering ACPI NVS region [mem 0x9e49e000-0x9eb8dfff] (7274496 bytes)
[    0.350148] ACPI FADT declares the system doesn't support PCIe ASPM, so disable it
[    0.350148] ACPI: bus type PCI registered
[    0.350148] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5   //acpipphp PCIe HotPlug 감지 아래소스 참고 
[    0.352204] ACPI: Added _OSI(Module Device)
[    0.352205] ACPI: Added _OSI(Processor Device)
[    0.352206] ACPI: Added _OSI(3.0 _SCP Extensions)
[    0.352207] ACPI: Added _OSI(Processor Aggregator Device)
[    0.352207] ACPI: Added _OSI(Linux-Dell-Video)
[    0.352208] ACPI: Added _OSI(Linux-Lenovo-NV-HDMI-Audio)
[    0.352209] ACPI: Added _OSI(Linux-HPI-Hybrid-Graphics)
[    0.403571] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.TPLD], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.403578] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.403580] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.403630] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS01._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.403634] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.403635] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.403637] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS01._PLD], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.403639] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.403640] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.406600] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS02._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.406604] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.406605] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.406607] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS02._PLD], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.406609] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.406610] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.409555] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS03._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.409558] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.409560] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.409561] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS03._PLD], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.409563] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.409565] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.412506] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS04._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.412509] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.412511] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.412512] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS04._PLD], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.412514] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.412516] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.415455] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS05._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.415458] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.415459] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.418403] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS06._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.418406] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.418407] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.418409] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS06._PLD], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.418411] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.418412] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.421356] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS07._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.421359] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.421361] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.424304] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS08._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.424307] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.424308] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.427252] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS09._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.427255] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.427256] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.427257] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS09._PLD], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.427260] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.427261] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.430204] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS10._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.430207] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.430208] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.433154] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS11._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.433157] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.433158] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.436096] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS12._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.436099] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.436100] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.439045] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS13._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.439048] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.439049] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.441992] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS14._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.441995] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.441997] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.441998] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.HS14._PLD], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.442000] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.442002] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.444924] ACPI BIOS Error (bug): Could not resolve [\_SB.PCI0.XHC.RHUB.USR1], AE_NOT_FOUND (20181213/dswload2-160)
[    0.444927] ACPI Error: AE_NOT_FOUND, During name lookup/catalog (20181213/psobject-221)
[    0.444929] ACPI: Skipping parse of AML opcode: Scope (0x0010)
[    0.444932] ACPI BIOS Error (bug): Could not resolve [\_SB.PCI0.XHC.RHUB.USR2], AE_NOT_FOUND (20181213/dswload2-160)
[    0.444934] ACPI Error: AE_NOT_FOUND, During name lookup/catalog (20181213/psobject-221)
[    0.444936] ACPI: Skipping parse of AML opcode: Scope (0x0010)
[    0.444963] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.SS01._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.444965] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.444967] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.444968] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.SS01._PLD], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.444971] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.444972] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.445004] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.SS02._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.445007] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.445008] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.445010] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.SS02._PLD], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.445012] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.445013] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.445045] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.SS03._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.445048] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.445049] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.445051] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.SS03._PLD], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.445053] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.445054] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.445086] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.SS04._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.445089] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.445090] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.445091] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.SS04._PLD], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.445094] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.445095] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.445126] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.SS05._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.445129] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.445130] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.445161] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.SS06._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.445163] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.445165] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.445192] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.SS07._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.445195] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.445196] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.445224] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.SS08._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.445227] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.445228] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.445256] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.SS09._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.445258] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.445259] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.445287] ACPI BIOS Error (bug): Failure creating [\_SB.PCI0.XHC.RHUB.SS10._UPC], AE_ALREADY_EXISTS (20181213/dswload2-324)
[    0.445290] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20181213/psobject-221)
[    0.445291] ACPI: Skipping parse of AML opcode: Method (0x0014)
[    0.446394] ACPI BIOS Error (bug): Could not resolve [\_SB.PCI0.I2C2.TPD0], AE_NOT_FOUND (20181213/dswload2-160)
[    0.446398] ACPI Error: AE_NOT_FOUND, During name lookup/catalog (20181213/psobject-221)
[    0.446400] ACPI: Skipping parse of AML opcode: Scope (0x0010)
[    0.446426] ACPI BIOS Error (bug): Could not resolve [\_SB.PCI0.I2C3.TPL1], AE_NOT_FOUND (20181213/dswload2-160)
[    0.446429] ACPI Error: AE_NOT_FOUND, During name lookup/catalog (20181213/psobject-221)
[    0.446430] ACPI: Skipping parse of AML opcode: Scope (0x0010)
[    0.449074] ACPI: 12 ACPI AML tables successfully acquired and loaded
[    0.464591] ACPI: Dynamic OEM Table Load:
[    0.464604] ACPI: SSDT 0xFFFF9AD9B96C1F00 0000F4 (v02 PmRef  Cpu0Psd  00003000 INTL 20160422)
[    0.465078] ACPI: \_SB_.PR00: _OSC native thermal LVT Acked
[    0.466075] ACPI: Dynamic OEM Table Load:
[    0.466082] ACPI: SSDT 0xFFFF9AD9B96BFC00 000400 (v02 PmRef  Cpu0Cst  00003001 INTL 20160422)
[    0.466693] ACPI: Dynamic OEM Table Load:
[    0.466699] ACPI: SSDT 0xFFFF9AD9B9F35800 000581 (v02 PmRef  Cpu0Ist  00003000 INTL 20160422)
[    0.467398] ACPI: Dynamic OEM Table Load:
[    0.467403] ACPI: SSDT 0xFFFF9AD9B96C6600 00011B (v02 PmRef  Cpu0Hwp  00003000 INTL 20160422)
[    0.467911] ACPI: Dynamic OEM Table Load:
[    0.467918] ACPI: SSDT 0xFFFF9AD9B9F35000 000724 (v02 PmRef  HwpLvt   00003000 INTL 20160422)
[    0.468765] ACPI: Dynamic OEM Table Load:
[    0.468771] ACPI: SSDT 0xFFFF9AD9B9F37800 0005FC (v02 PmRef  ApIst    00003000 INTL 20160422)
[    0.469469] ACPI: Dynamic OEM Table Load:
[    0.469475] ACPI: SSDT 0xFFFF9AD9B96B8C00 000317 (v02 PmRef  ApHwp    00003000 INTL 20160422)
[    0.470185] ACPI: Dynamic OEM Table Load:
[    0.470191] ACPI: SSDT 0xFFFF9AD9B9F81000 000AB0 (v02 PmRef  ApPsd    00003000 INTL 20160422)
[    0.471527] ACPI: Dynamic OEM Table Load:
[    0.471533] ACPI: SSDT 0xFFFF9AD9B96BC000 00030A (v02 PmRef  ApCst    00003000 INTL 20160422)
[    0.477238] ACPI: EC: EC started
[    0.477239] ACPI: EC: interrupt blocked
[    0.492285] ACPI: \_SB_.PCI0.LPCB.EC0_: Used as first EC
[    0.492286] ACPI: \_SB_.PCI0.LPCB.EC0_: GPE=0x2, EC_CMD/EC_SC=0x66, EC_DATA=0x62
[    0.492287] ACPI: \_SB_.PCI0.LPCB.EC0_: Used as boot DSDT EC to handle transactions
[    0.492288] ACPI: Interpreter enabled
[    0.492341] ACPI: (supports S0 S3 S4 S5)
[    0.492342] ACPI: Using IOAPIC for interrupt routing
[    0.492386] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug
[    0.492959] ACPI: Enabled 10 GPEs in block 00 to 7F
[    0.494043] ACPI: Power Resource [PG00] (on)
[    0.498501] ACPI: Power Resource [PUBS] (on)
[    0.499519] ACPI: Power Resource [BTPR] (on)
[    0.501236] ACPI: Power Resource [USBC] (on)
[    0.501446] ACPI: Power Resource [PAUD] (on)
[    0.505921] ACPI: Power Resource [PXP] (off)
[    0.513409] ACPI: Power Resource [PXP] (off)
[    0.515322] ACPI: Power Resource [V0PR] (on)
[    0.515548] ACPI: Power Resource [V1PR] (on)
[    0.515769] ACPI: Power Resource [V2PR] (on)
[    0.518096] ACPI: Power Resource [PXTC] (on)
[    0.518595] ACPI: Power Resource [PXTC] (off)
[    0.520702] ACPI: Power Resource [WRST] (on)
[    0.523071] ACPI: Power Resource [PIN] (off)
[    0.523600] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-fe])
[    0.562428] ACPI: EC: interrupt unblocked
[    0.562456] ACPI: EC: event unblocked
[    0.562478] ACPI: \_SB_.PCI0.LPCB.EC0_: GPE=0x2, EC_CMD/EC_SC=0x66, EC_DATA=0x62
[    0.562479] ACPI: \_SB_.PCI0.LPCB.EC0_: Used as boot DSDT EC to handle transactions and events
[    0.562561] ACPI: bus type USB registered
[    0.612565] PCI: Using ACPI for IRQ routing
[    0.714118] pnp: PnP ACPI init
[    0.714239] system 00:00: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.714629] system 00:01: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.714973] system 00:02: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.715178] system 00:03: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.715312] system 00:04: Plug and Play ACPI device, IDs INT3f0d PNP0c02 (active)
[    0.715348] pnp 00:05: Plug and Play ACPI device, IDs PNP0303 (active)
[    0.716871] system 00:06: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.717454] system 00:07: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.717663] pnp: PnP ACPI: found 8 devices
[    1.310148] ACPI: AC Adapter [ADP0] (on-line)
[    1.310219] ACPI: Lid Switch [LID0]
[    1.310246] ACPI: Power Button [PWRB]
[    1.408535] battery: ACPI: Battery Slot [BAT0] (battery present)
[    1.519238] [Firmware Bug]: ACPI(PEGP) defines _DOD but not _DOS
[    1.519281] ACPI: Video Device [PEGP] (multi-head: yes  rom: yes  post: no)
[    3.213312] ACPI Warning: \_SB.PCI0.PEG0.PEGP._DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (20181213/nsarguments-66)


  • ACPI Dump 분석 
로그를 대충 보면, 일반적인 Power Resource는 가능한 것으로 보인다. 

$ sudo apt-get update -y
$ sudo apt-get install -y acpidump
$ sudo acpidump -s
ACPI: SSDT 0x0000000000000000 000046 (v02 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: MCFG 0x0000000000000000 00003C (v01 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: ASF! 0x0000000000000000 0000A5 (v32 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: APIC 0x0000000000000000 00012C (v03 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: SSDT 0x0000000000000000 0031D0 (v02 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: TPM2 0x0000000000000000 000034 (v03 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: SSDT 0x0000000000000000 002BBF (v02 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: DSDT 0x0000000000000000 0304E0 (v02 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: SSDT 0x0000000000000000 000896 (v02 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: WSMT 0x0000000000000000 000028 (v01 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: SSDT 0x0000000000000000 0000F4 (v02 PmRef  Cpu0Psd  00003000 INTL 20160422)
ACPI: LPIT 0x0000000000000000 000094 (v01 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: SSDT 0x0000000000000000 0044B6 (v02 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: UEFI 0x0000000000000000 000236 (v01 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: DBG2 0x0000000000000000 000061 (v00 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: SSDT 0x0000000000000000 002A9D (v01 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: POAT 0x0000000000000000 000055 (v03 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: SSDT 0x0000000000000000 00045A (v02 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: DMAR 0x0000000000000000 000070 (v01 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: FACP 0x0000000000000000 00010C (v05 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: FPDT 0x0000000000000000 000044 (v01 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: SSDT 0x0000000000000000 001B1C (v02 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: SSDT 0x0000000000000000 002F89 (v02 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: DBGP 0x0000000000000000 000034 (v01 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: HPET 0x0000000000000000 000038 (v01 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: SSDT 0x0000000000000000 000C2F (v02 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: UEFI 0x0000000000000000 000042 (v01 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: FACS 0x0000000000000000 000040
ACPI: BGRT 0x0000000000000000 000038 (v01 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: SSDT 0x0000000000000000 00004C (v02 LENOVO CB-01    00000001 ACPI 00040000)
ACPI: SSDT 0x0000000000000000 000317 (v02 PmRef  ApHwp    00003000 INTL 20160422)
ACPI: SSDT 0x0000000000000000 000724 (v02 PmRef  HwpLvt   00003000 INTL 20160422)
ACPI: SSDT 0x0000000000000000 000581 (v02 PmRef  Cpu0Ist  00003000 INTL 20160422)
ACPI: SSDT 0x0000000000000000 00030A (v02 PmRef  ApCst    00003000 INTL 20160422)
ACPI: SSDT 0x0000000000000000 000AB0 (v02 PmRef  ApPsd    00003000 INTL 20160422)
ACPI: SSDT 0x0000000000000000 0005FC (v02 PmRef  ApIst    00003000 INTL 20160422)
ACPI: SSDT 0x0000000000000000 00011B (v02 PmRef  Cpu0Hwp  00003000 INTL 20160422)
ACPI: SSDT 0x0000000000000000 000400 (v02 PmRef  Cpu0Cst  00003001 INTL 20160422)

참조자료
  https://bugzilla.redhat.com/show_bug.cgi?id=1610727

상위 acidump로 본 각 Table 정보 및 Spec

  • 상위 로그분석 및 커널부분 (ACPI Linux Kernel Driver)
ACPI라는 것이 PCIe Interface로 연결되어 Hotplug로 잡혀 Kernel에서 상위 Driver를 지원을 해줘야하며, 관련 Linux Kernel Driver를 각각 살펴보자.

  • Linux Kernel HotPlug 소스 (관련 ACPI Core)
아래 소스을 보면 HotPlug기능을 대충이해가능하며, 참고 
  1. DRIVER_DESC 
  2. DRIVER_VERSION 
  https://elixir.bootlin.com/linux/latest/source/drivers/pci/hotplug/acpiphp_core.c

  • Linux Kernel 관련 ACPI Log Kernel 소스 
  1. ACPI_INFO
  2. ACPI_ERROR
  3. ACPI_BIOS_ERROR 
상위 내용들을 아래에서 찾아 Kernel에서 검색해서 상위동작부분 LOG 파악가능
  https://elixir.bootlin.com/linux/latest/source/include/acpi/acoutput.h#L205

  • ACPI 에러 현재결론 
BIOS의 ACPI의 문제해결은 어려울 것 같으며, 인터넷을 찾아봐도 답은 BIOS Update라고 하는데, 
이미 최신 BIOS로 Upgrade했으며, Downgrade를 해야 하나 생각중이다
역시 Linux를 설치하려면, 오래된 Laptop이 최고인데, 새로운 Laptop은 새 기능이 많아 아직 지원되지 않는게 많다.

결론적으로 소스를 보면, Linux Kernel의 PCIe Driver에서 ACPI부분을 지원이 가능해야 제대로된 동작이 가능하며, BIOS문제로만 치부될 사항은 아닌 것 같다

대충구조를 보면, Table을 만들어 관리하고 이 기준으로 통신하는 것 같은데, 일단 ACPI는 관련부분에러는 포기하고, 최대한 에러없도록 설치하자

편히 설치가능하면 좋은데 T.T 지속적인 문제 발생이 문제로군.